java如何处理字符串文字
在java中,我创建了2个具有相同值的字符串文字
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类是不可变的)
您可以更改b
的原因是因为您在技术上创建了一个新的String对象并将其分配给现有引用。
b += " World"
是相同的
b = b + " World";
b
在技术上指向一个新的String对象。 所以首先, a
和b
指向同一个对象,但是当b
被修改时,它现在是一个不同的对象,所以a
将不等于"Hello World"
而a==b
现在将为false。
有关可变String类的示例,请尝试StringBuffer
或StringBuilder
。 您可以使用他们的.append()
方法添加到字符串,以及其他方法来修改它。
-
当你执行
b+=" World"
你正在创建一个新的字符串实例,当然这不再指向相同的旧字符串。 -
您没有更改旧字符串,而是创建新字符串并将其分配给变量b。 如果要始终使用该变量引用同一对象,请使用
final
修饰符。
-
a和b指向String对象。 修改b意味着您现在指向一个新对象。
-
因为字符串是不可变的,所以当您“修改”字符串时,会创建一个新对象。 这就是为什么第二个不再相同的原因。