java如何处理字符串文字

时间:2013-08-06 15:48:50

标签: java string-literals

在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类是不可变的)

3 个答案:

答案 0 :(得分:4)

您可以更改b的原因是因为您在技术上制作了一个新的String对象并将其分配给现有的引用。

b += " World"

相同
b = b + " World";

b在技术上指向一个新的String对象。首先,ab指向同一个对象,但是当b被修改时,它现在是另一个对象,因此a将不等于{{ 1}}和"Hello World"现在都是假的。

有关可变String类的示例,请尝试a==bStringBuffer。您可以使用他们的StringBuilder方法添加到字符串,以及其他方法来修改它。

答案 1 :(得分:2)

  1. 当您执行b+=" World"时,您正在创建一个新的字符串实例,当然这不再指向相同的旧字符串。

  2. 您没有更改旧字符串,而是创建新字符串并将其分配给变量b。如果要始终使用该变量引用同一对象,请使用final修饰符。

答案 2 :(得分:0)

  1. a和b指向String对象。修改b意味着您现在指向一个新对象。

  2. 因为字符串是不可变的,所以当你修改"一个字符串,创建一个新对象。这就是为什么第二个不再相同的原因。