关于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