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对象。 所以首先, ab指向同一个对象,但是当b被修改时,它现在是一个不同的对象,所以a将不等于"Hello World"a==b现在将为false。

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

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

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

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

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