java如何处理字符串文本

java如何处理字符串文本,java,string-literals,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 现在我有两个问题 1.为什么a和b在“b+=”操作后未引用同一对象? 2.为什么我能够在没有任何错误的情况下更改字符串

在java中,我创建了两个具有相同值的字符串文本

String a = "Hello";
String b = "Hello";
现在,它们应该具有相同的引用

System.out.println(a==n); // returns true
但当我这么做的时候

b+=" World";
System.out.println(a==b); // returns false
现在我有两个问题 1.为什么a和b在“b+=”操作后未引用同一对象? 2.为什么我能够在没有任何错误的情况下更改字符串b?因为我已经读到字符串类是不可变的

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

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

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

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

a和b指向一个字符串对象。修改b表示您现在指向一个新对象

因为字符串是不可变的,所以当您修改字符串时,将创建一个新对象。这就是为什么第二个已经不一样了

a和b指向一个字符串对象。修改b表示您现在指向一个新对象

因为字符串是不可变的,所以当您修改字符串时,将创建一个新对象。这就是为什么第二个已经不一样了

可以更改b的原因是,从技术上讲,您正在创建一个新的字符串对象,并将其分配给现有引用

b += " World"

b = b + " World";
从技术上讲,b指向一个新的字符串对象。首先,a和b指向同一个对象,但当b被修改时,它现在是一个不同的对象,所以a将不等于Hello World,a==b将为false

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

您可以更改b的原因是,从技术上讲,您正在创建一个新的字符串对象并将其分配给现有引用

b += " World"

b = b + " World";
从技术上讲,b指向一个新的字符串对象。首先,a和b指向同一个对象,但当b被修改时,它现在是一个不同的对象,所以a将不等于Hello World,a==b将为false


有关可变字符串类的示例,请尝试StringBuffer或StringBuilder。您可以使用他们的.append方法添加到字符串中,并使用其他方法对其进行修改。

这个问题已经被询问和回答了数百次。请先搜索。可能是重复的或真的在众多其他。可能是我没有寻找足够努力,但我这样搜索了这个。。坦率地说,我没有发现任何其他地方+=会创建一个新实例。我很好奇,所以我不得不发布一个新的问题,我得到了答案:是的,我认为这是问得最多的问题的原因是很难想出一个短语来搜索。这正是面向文本的搜索失败的地方。这个问题已经被问了几百次了,也被回答了几百次。请先搜索。可能是重复的或真的在众多其他。可能是我没有寻找足够努力,但我这样搜索了这个。。坦率地说,我没有发现任何其他地方+=会创建一个新实例。我很好奇,所以我不得不发布一个新的问题,我得到了答案:是的,我认为这是问得最多的问题的原因是很难想出一个短语来搜索。这正是面向文本的搜索失败的地方。