关于Java的引用

类别:Java 点击:0 评论:0 推荐:
 

 

关于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的引用。那为什么sb1和sb2没有交换呢?下面将用图形来解释。

 

(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

 

 

从上面可以看出方法交换的是s1和s2,并没有交换sb1和sb2.

本文地址:http://com.8s8s.com/it/it16560.htm