public class Test{
public static void main(String[] args){
StringBuilder a = new StringBuilder("A");
StringBuilder b = new StringBuilder("B");
operate(a,b);
System.out.println(a+","+b);
}
static void operate(StringBuilder a,StringBuilder b){
a.append(b);
b=a;
}
}
输出结果为什么是AB,B
而不是AB,AB呢?
------解决方案--------------------
这个涉及到引用传递的问题! 在方法中的 a 和 b 在栈中是虚拟出来的,跟主函数中的a b 不是一回事,
a.append(b) 改变了方法和主函数中的a的值. 但是 b = a 这是吧a的内存地址赋给了方法中的b
方法中的b 在出了方法后弹栈了,主函数中的b值一直就没变
------解决方案--------------------
为什么a的值是AB?
因为虽然传递的a的引用副本(说法其实略有问题)
但是a.append(b)修改的是引用副本指向的内容,a指向的内容自然也就变了
为什么b值为B?
因为b=a;只是简单的把引用副本指向了a而已,它所指向的内存里面的内容没变!
说白了,一个是地址的改变
一个是地址内容的改变!