关于Java的引用

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航