在java中,我创建了两个具有相同值的字符串文字
String a = "Hello";
String b = "Hello";
现在两者都应该有相同的参考
System.out.println(a==n); // returns true
但是当我做的时候
b+=" World";
System.out.println(a==b); // returns false
现在我有2个问题 1.为什么a和b在“b + =”运算后没有引用同一个对象? 2.为什么我能够在没有任何错误的情况下更改字符串b?(因为我已经读过String类是不可变的)
答案 0 :(得分:4)
您可以更改b
的原因是因为您在技术上制作了一个新的String对象并将其分配给现有的引用。
b += " World"
与
相同b = b + " World";
b
在技术上指向一个新的String对象。首先,a
和b
指向同一个对象,但是当b
被修改时,它现在是另一个对象,因此a
将不等于{{ 1}}和"Hello World"
现在都是假的。
有关可变String类的示例,请尝试a==b
或StringBuffer
。您可以使用他们的StringBuilder
方法添加到字符串,以及其他方法来修改它。
答案 1 :(得分:2)
当您执行b+=" World"
时,您正在创建一个新的字符串实例,当然这不再指向相同的旧字符串。
您没有更改旧字符串,而是创建新字符串并将其分配给变量b。如果要始终使用该变量引用同一对象,请使用final
修饰符。
答案 2 :(得分:0)
a和b指向String对象。修改b意味着您现在指向一个新对象。
因为字符串是不可变的,所以当你修改"一个字符串,创建一个新对象。这就是为什么第二个不再相同的原因。