1

在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. 为什么在 'b+=' 操作之后 a 和 b 没有引用同一个对象?2.我怎么能在没有任何错误的情况下更改字符串b?(因为我读过String类是不可变的)

4

3 回答 3

4

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

b += " World"

是相同的

b = b + " World";

b在技​​术上指向一个新的 String 对象。所以开始,a并且b指向同一个对象,但是当b被修改时它现在是一个不同的对象,所以a不会相等"Hello World"并且a==b现在是错误的。

有关可变 String 类的示例,请尝试使用StringBufferStringBuilder. 您可以使用他们的.append()方法添加到字符串,以及其他方法来修改它。

于 2013-08-06T15:54:06.240 回答
2
  1. 当您这样做时,b+=" World"您正在创建一个新的字符串实例,当然这不再指向相同的旧字符串。

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

于 2013-08-06T15:50:48.700 回答
0
  1. a 和 b 指向一个 String 对象。修改 b,意味着您现在指向一个新对象。

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

于 2013-08-06T15:52:22.723 回答