Java 为什么这段代码没有给出预期的输出
我希望输出为AB,ABCD,但输出为ABCD,B。这怎么可能Java 为什么这段代码没有给出预期的输出,java,stringbuffer,Java,Stringbuffer,我希望输出为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,
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");
}
}
所以最初,你有这个
a -> [A...] b -> [B...]
然后,当您调用operate
时,您会得到两个新变量,它们引用相同的两个StringBuffer
对象
a b
-> [A...] -> [B...]
x y
然后将一个StringBuffer
的内容附加到另一个
a b
-> [AB...] -> [B...]
x y
然后将另一个字母附加到第一个StringBuffer
,并重新指向变量y
,使其现在引用与a
和x
相同的StringBuffer
a
x -> [ABC...] b -> [B...]
y
然后再添加一个字母,现在将第一个StringBuffer
引用为y
a
x -> [ABCD...] b -> [B...]
y
然后退出
operate
并打印出两个StringBuffer
对象的内容。您似乎认为x.append(y)
返回存储在x
中的新字符串,但它没有返回。看,只需将指针返回到x
a b
-> [A...] -> [B...]
x y
现在,根据这一点,再次阅读您的代码,看看您是否理解了输出 你调试代码了吗?你知道你的代码中有一个x.append(“C”),那么你怎么不希望a中有“C”呢?我不清楚该怎么回答。我只是通过读取代码来获取当前输出。您有什么意外?@TimBiegeleisen您能帮我处理输出ABCD,B吗。我的意思是,当我们在方法中操作时,在方法的末尾,a和b的值分别是ABCD和ABCD,但在函数结束后,其值变成ABCD,b。您将
x=a
和y=b
传递给operate()
方法。然后将B
附加到第一行的A
,给出x=AB
。然后,在第二行和第三行,你应该注意像“global”这样的描述,因为Java没有全局变量