public static void main(String args[]){
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a + "," + b);
}
static void operate(StringBuffer x, StringBuffer y) {
x.append(y);
y=x;
}
上面代码运行结果是输出AB,B,为何不是AB,AB,y=x这句不发生吗还是怎么样
------解决思路----------------------
首先,a指向了一个内存地址,该地址中的值为“A”(暂且把这个地址标识为addr1),b指向了另一个内存地址,该地址中的值为“B”(暂且把这个地址标识为addr2),a,b作为参数传进方法的其实是addr1和addr2,可以理解为x指向了addr1,y指向了addr2,当x.append(y)执行后,addr1中的值变为“AB”,执行y=x后,y不再指向addr2,而是指向了addr1,来看看此时两个内存地址的值:addr1中是“AB”,addr2中仍然是“B”,而方法外的a,b指向未变,所以输出这样的答案。
好像有那么点绕,不过应该比较好理解!