在下面的代码中,我假设两个对象都引用了同一个对象,但下面的示例表明我错了。抱歉,如果它是重复的。
class A {
public String a;
public void set(String a) {
this.a = a;
}
}
class B {
public String b;
public void set(String b) {
this.b = b;
}
}
A aC = new A();
B bC = new B();
String str = "aaa";
aC.set(str);
bC.set(aC.a);
aC.a += "a";
System.out.println(aC.a);
System.out.println(bC.b);
最佳答案
让你困惑的是你的想法
aC.a += "a";
修改aC.a
引用的String对象的状态。事实并非如此。字符串是不可变的,上面的代码行创建一个新的 String 对象并将其分配给 aC.a,保留对原始对象的所有其他引用不变。
使用StringBuilder
进行相同的测试,然后调用
aC.a.append("a");
你会得到不同的结果。
关于java - Java 不是通过引用传递非原始类型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313884/