Java:字符串引用获得意外输出

Ran*_*Rag 0 java string

我的代码是:

String str = "Hello";
String str1;
str1 = str;
str1 = str1 + " World";
System.out.println(str1);
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Hello World
Hello
Run Code Online (Sandbox Code Playgroud)

我期望的输出是Hello World针对这两种情况的,因为根据我的理解,在str1 = str两个对象都引用相同的位置后,如果我改变一个对象的内容,其他也应该受到影响.

那么,是str1 = str1 + " World";在不同的内存位置创建一个新的字符串对象.

bet*_*ejo 7

字符串是不可变的.当你这样做时str1 = str1 + " World";,你正在创建一个全新的String并更新str1它的引用.你永远不会重新放弃,str所以这是预期的行为.