CSDN博客

img dickjava

关于Java的引用

发表于2004/4/20 12:05:00  1011人阅读

 

 

关于Java的引用

 

看了几篇介绍Java引用的文章,好象都没有用图形来说明,有些读者(包括刚开始的我)越看越糊涂。现发一篇数型结合的文章,希望大家多提意见。

 

  本篇文章用的程序:

public class example {

       private static void swap(StringBuffer s1, StringBuffer s2) {

              s1.append(“append”);

              StringBuffer t;

t = s1;

              s1 = s2;

              s2 = t;

       }

 

       public static void main(String[] args) {

              StringBuffer sb1 = new StringBuffer();

              StringBuffer sb2 = new StringBuffer();

              sb1.append(“sb1”);

              sb2.append(“sb2”);

              swap(sb1,sb2);

              System.out.println(sb1);

              System.out.println(sb2);

       }

}

 

输出为:

sb1append

sb2

 

sb1的值在方法swap()中改变了,说明传递的参数是sb1的引用。那为什么sb1sb2没有交换呢?下面将用图形来解释。

 

1)见图1。还没调用方法swap()前的堆和栈,堆和栈之间的连线表示引用(或指向)

                          1

 

2)调用方法swap(),但还没有执行方法swap()中的指令。见图2

                          2

 

3)执行了s1.append(“ append”)StringBuffer t;后。见图3

                          3

 

4)执行了t = s1; 后。见图4

                          4

 

5)执行了s1 = s2 后。见图5

                           5

 

6)执行了s2 = t; 后。见图6

                          ;

                           6

 

7)方法swap()调用完,回到方法main()后。见图7

                           7

 

 

从上面可以看出方法交换的是s1s2,并没有交换sb1sb2.

0 0

相关博文

我的热门文章

img
取 消
img