我的教科书说字符串
是不可重写或不可变的,即,一旦输入字符串的值,就无法更改它。但今天,当我运行以下代码时,String str
被静音,因为编译器没有给出任何错误,并且新的 String a
' s 值已成功输入到 str
中。
class Test
{
static void main()
{
String str = "something";
String a ="anything";
str = a; //str is being over written without any error
System.out.println(str);
}
}
输出是:任何东西
那么,我的书错了吗?
如果我的书没有错,请举例说明String
是不可变的
最佳答案
这本书是正确的。当您说str = a
时,您并没有更改String
“某物”的任何内容。您应该区分 str
和 something
,它们是不一样的。这里的“something”是内存中的 String 对象,而 str 只是对该字符串的引用。与引用a
相同。
当你说:
str = a
您并没有更改某些内容
,您实际上是在说,“更改引用str
以指向引用a
所指向的任何内容到。” String
保持不变,引用发生变化。
类似地,这就是为什么您可能会在书中看到连接 String
的成本很高,例如执行以下操作:
str = str + a
同样不会更改现有的String
,而是创建一个新的String
对象,该对象等于String
的串联引用 str
所引用的 String
以及引用 a
所引用的 String
。
关于java - 字符串可以重写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21623425/