java初学者提问

来源:百度知道 编辑:UC知道 时间:2024/05/23 16:56:27
public class StringBufferDemo {
static void operate(StringBuffer buffer1, StringBuffer buffer2) {
buffer1.append(buffer2);
buffer2 = buffer1;
System.out.println(buffer1 + "," + buffer2);
}
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a + "," + b);
}
}

输出结果是
AB,AB
AB,B
为什么不是
AB,AB
A,B
呢?

帮我讲讲,谢了!~

为什麼a的值被改变了而b的值没有变。
原因在於buffer1.append(buffer2); buffer2 = buffer1; 这两句话。
buffer1.append(buffer2)是改变了buffer1指向的对象,即a。
而buffer2 = buffer1仅仅是改变了buffer2的指向,即buffer2从原来指向b从而改为指向a,但这并没有改变b这个对象。

不知道你有没有理解。
只要你了解下面几句的区别,那这个问题是很好理解的。
String msg1="a";
msg1=msg1+"b";

StringBuffer msg2 = new StringBuffer("a");
msg2.append("b");

虽然两个字符串的结果都是ab,但是性质是万全不同的
第一个msg1先是指向对象a的,后来运行加法运算,生成了一个新的对象ab,而msg1指向了"ab"这个对象。这时有了三个对象,即"a","b","ab",它们有不同的地址空间。

第二个则是直接改变msg2指向的对象"a",从始至终只有一个对象。
即地址空间不变,只是内容在变。

回答的太好了!