java - Java中的String为什么是不可变的对象,但我在创建一个对象后仍然可以更改它的值?

标签 java string object immutability

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

String a="abc";
a="def";

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

请帮忙,谢谢。

最佳答案

您没有更改其值,而是创建了一个新的字符串。从技术上讲,您的变量更改其值(其指向的内存位置)以引用新的String对象,但它指向新的String对象而不是相同的 String 对象。

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

关于java - Java中的String为什么是不可变的对象,但我在创建一个对象后仍然可以更改它的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31752304/

相关文章:

java - 使用 php 单击提交按钮

javascript - 无法在js中的条件语句中比较0

javascript - 如何在 JavaScript 中扩展一个类

javascript - 在 Javascript 中向对象原型(prototype)添加许多函数时出现性能问题?

javascript - 为什么 forEach() 在此对象循环中不起作用?

java - 计算链接列表中给定数字的出现次数

java - 方法在应该返回 -1 时返回 NullPointerException

java - 如何在考虑DDD的基础上构建一个简单的REST应用( Spring / hibernate )?

c - 如何将字符串分配给C中的变量

python - 如果两个字符串都在列​​表中,则删除列表中作为另一个字符串的子字符串的字符串