我期望输出为AB,ABCD,但输出为ABCD,B。那怎么可能?
public class Test {
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.append("C");
y.append("D");
}
}
答案 0 :(得分:1)
所以最初,您有这个。
a -> [A...] b -> [B...]
然后,当您调用operate
时,会得到两个新变量,它们引用相同的两个StringBuffer
对象。
a b
-> [A...] -> [B...]
x y
然后将一个StringBuffer
的内容附加到另一个。
a b
-> [AB...] -> [B...]
x y
然后将另一个字母附加到第一个StringBuffer
上,并重新指向变量y
,以使其现在引用与StringBuffer
和{{1 }}。
a
您再追加一个字母,现在将第一个x
称为a
x -> [ABC...] b -> [B...]
y
。
StringBuffer
然后,您从y
退出并打印出两个a
x -> [ABCD...] b -> [B...]
y
对象的内容。
答案 1 :(得分:0)
似乎您认为x.append(y)
返回了存储在x
中的新字符串,但事实并非如此。看起来here,看到它只是将指针返回到x 。
现在有了这种洞察力,请再次阅读代码,以了解输出。