我是java技术的新手,可能是一个简单的问题,但我很困惑.我知道java中没有引用调用的概念.它只使用按值调用,即将副本传递给另一个方法
请检查以下代码的输出
public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
System.out.println("Before Operate"+a + "," +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");
}
}
Run Code Online (Sandbox Code Playgroud)
以上代码的输出为:ABCD,B(Second Syso)
我不知道为什么这会把所有东西都追加到b中.我google了很多,但它只会造成混乱.如果有人完全详细说明,那将会很有帮助.
提前致谢
PS: - 如果已经在这个论坛上被问到,请给我一个链接,因为我无法找到它.
Mat*_*all 10
是的,Java始终是按值传递的,但您需要了解其价值.对于对象,传递的值是对象的引用,而不是对象本身.请参阅Java是"传递引用"还是"按值传递"?详细解释.
我不知道为什么这会把所有东西都追加到b中.
因为这:
x.append(y);
y = x.append("C");
y.append("D");
Run Code Online (Sandbox Code Playgroud)
与此完全相同:
x.append(y);
x.append("C");
x.append("D");
Run Code Online (Sandbox Code Playgroud)
由于StringBuilder#append()回报率this,使分配给y在
y = x.append("C");
Run Code Online (Sandbox Code Playgroud)
使用对(aka )的引用覆盖对(b)传入的对象的引用.xa