Java 中的 String 如何成为一个不可变对象,但我仍然可以在创建一个对象后更改它的值?
How is String in Java an immutable object, but I can still change its value after creating one?
如果我可以创建一个字符串并赋予它一个值,这怎么可能呢?然后,我可以像这样简单地覆盖它的值:
String a="abc";
a="def";
我怎么可能改变 a
的值?我一定是在这里遗漏了什么。我知道每当创建一个 String 对象时都会使用 Strings 文字,而不是每次都创建一个新的 String 实例
请帮忙,谢谢。
您没有更改它的值,而是在创建一个新的 String
。从技术上讲,您的变量更改其值 (memory location its pointing to)
以引用新的 String
对象,但它指向新的 String
对象而不是相同的 String
对象。
您实际上并没有更改原始 String
对象的值,您只是在引用一个新的 String
对象,因此虽然变量的值确实发生了变化,但您实际上并没有更改原始对象String
对象...希望有道理。
String a="abc";//creating string literal object
a="def";
您实际上是在将 a
的引用更改为由字符串文字 "def" 创建的新对象。
String
是不可变的意味着你不能改变对象本身,但是你可以改变对对象的引用。改变一个对象意味着使用它的方法来改变它的字段之一。
如果我可以创建一个字符串并赋予它一个值,这怎么可能呢?然后,我可以像这样简单地覆盖它的值:
String a="abc";
a="def";
我怎么可能改变 a
的值?我一定是在这里遗漏了什么。我知道每当创建一个 String 对象时都会使用 Strings 文字,而不是每次都创建一个新的 String 实例
请帮忙,谢谢。
您没有更改它的值,而是在创建一个新的 String
。从技术上讲,您的变量更改其值 (memory location its pointing to)
以引用新的 String
对象,但它指向新的 String
对象而不是相同的 String
对象。
您实际上并没有更改原始 String
对象的值,您只是在引用一个新的 String
对象,因此虽然变量的值确实发生了变化,但您实际上并没有更改原始对象String
对象...希望有道理。
String a="abc";//creating string literal object
a="def";
您实际上是在将 a
的引用更改为由字符串文字 "def" 创建的新对象。
String
是不可变的意味着你不能改变对象本身,但是你可以改变对对象的引用。改变一个对象意味着使用它的方法来改变它的字段之一。