Java中究竟是传值还是传引用
在Java中,事实上底层工作原理不存在传引用的概念,这也象《Practical Java》中所说的那样,Java中只有传值。这句话理解起来需要费一定的周折。
变量x \
-->[追加为"Hello World!"]
变量x /
为什么x值能改变呢?因为这个例子是传引用的。
这几个例子是明白了,可是很多人会开始有另一个疑问了:这样看来,到底什么时候是传的值什么时候是传得引用呢?于是,我们前面讲到的类型和类在这里就派上了用场:对于参数传递,如果是简单数据类型,那么它传递的是值拷贝,对于类的实例它传递的是类的引用。需要注意的是,这条规则只适用于参数传递。为什么这么说呢?我们看看这样一个例子:
//例5
String str="abcdefghijk";
str.replaceAll("b","B");
这两句执行后,str的内容依然是"abcdefghijk",但是我们明明是对str操作的,为什么是这样的呢?因为str的值究竟会不会被改变完全取决于replaceAll这个方法是怎么实现的。类似的,有这样一个例子:
//例6
| 1 void method1() {
2 StringBuffer x = new StringBuffer("Hello"); 3 change1(x); 4 System.out.println(x); 5 } 6 7 void method2() { 8 StringBuffer x = new StringBuffer("Hello"); 9 change2(x); 10 System.out.println(x); 11 } 12 13 void change1(StringBuffer sb) { 14 sb.append(" world!"); 15 } 16 17 void change2(StringBuffer sb) { 18 sb = new StringBuffer("hi"); 19 sb.append(" world!"); 20 } |
- 本文关键词:

