Java 中的 String 如何是一个不可变对象,但我仍然可以在创建一个后更改它的值?

ami*_*o21 1 java string object immutability

如果我可以创建一个字符串,给它一个值,这怎么可能。然后,我可以简单地像这样覆盖它的值:

String a="abc";
a="def";
Run Code Online (Sandbox Code Playgroud)

我怎么可能改变 的值a?我一定在这里遗漏了一些东西。我知道每次创建 String 对象时都会使用 Strings 文字,而不是每次都创建一个新的 String 实例

请帮忙,谢谢。

brs*_*o05 5

你没有改变它的价值,你正在创造一个新的String. 从技术上讲,您的变量会更改其值(memory location its pointing to)以引用新String对象,但它指向的新String对象不是同一个String对象。

您实际上并没有更改原始String对象的值,您只是在引用一个新对象,String因此虽然变量的值确实发生了变化,但您实际上并没有更改原始String对象......希望这是有道理的。


Sat*_*TNV 5

String a="abc";//creating string literal object
a="def";
Run Code Online (Sandbox Code Playgroud)

您实际上正在更改a对由字符串文字“def”创建的新对象的引用。

String不可变意味着您不能更改对象本身,但可以更改对该对象的引用。改变一个对象意味着使用它的方法来改变它的字段之一。