Java中的String对象不是不可变的吗?

Bra*_*don 6 java string immutability

String s = ...;

s = s.substring(1);
Run Code Online (Sandbox Code Playgroud)

这可能吗?我以为你无法在Java中更改String对象.

And*_*mas 24

字符串对象是不可变的.但是,字符串引用是可变的.以上,s是一个参考.

  • Dang,我希望在你为自己做一堆简单的代表之前我已经看过这个Q. :) +1 (3认同)

SLa*_*aks 5

字符串对象是不可变的,这意味着所引用的实例的值s不能更改.

您的代码不会改变实例.
相反,它更改s引用以引用新的字符串实例.

例如:

String a = "1";
String b = a;
a = "2";
Run Code Online (Sandbox Code Playgroud)

执行此代码后,b仍然是"1".
该行b = a设置b为引用当前引用的同一"1"实例a.
当您随后编写时a = "2",您正在更改a变量以引用另一个("2")实例.
但是,仍然引用的原始"1"实例b没有改变.