java - 字符串可以重写吗?

标签 java string immutability overwrite

我的教科书说字符串不可重写或不可变的,即,一旦输入字符串的值,就无法更改它。但今天,当我运行以下代码时,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“某物”的任何内容。您应该区分 strsomething,它们是不一样的。这里的“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/

相关文章:

Perl 字符串的性能

c - c中scanf 3次不起作用?

c# - 正则表达式 *this close*,但仍然缺少一种符号

c# - 如何制作引用类型的副本

java - 点击fragment android时收到oom错误代码

java - 获取字符串的最后一个数字部分

scala - 在 2.8.x 中的 Scala 中管理灵活、类型化、不可变的数据结构

java - 这个类是不可变的吗?

java - 从 URL 读取内容会导致 Android 应用程序崩溃

java - 其他人是否可以在 src 中实现 `fake` Java 对象?