我在采访中被问到为什么 String 是不可变的
我这样回答:
当我们像
String s1="hello";
这样在 java 中创建一个字符串时,将在 字符串池(hello) 中创建一个对象, s1 将指向 hello 。现在如果我们再次这样做String s2="hello";
然后另一个对象不会创建,但 s2 将指向hello
因为 JVM 将首先检查 字符串池中 是否存在相同的对象。如果不存在,则只创建一个新对象,否则不创建。
现在,如果假设 java 允许字符串可变,那么如果我们将 s1 更改为 hello world
那么 s2 值也将是 hello world
所以 java String 是不可变的。
任何人都可以告诉我我的回答是 对 还是 错?
原文由 rocking 发布,翻译遵循 CC BY-SA 4.0 许可协议
String
是不可变的有几个原因,这里是一个总结:String
。如果它是可变的,则可以轻松更改这些参数。String
用作类加载的参数。如果是可变的,它可能会导致加载错误的类(因为可变对象会改变它们的状态)。话虽如此,
String
的不变性仅意味着您无法使用其公共 API 更改它。实际上,您可以使用反射绕过普通 API。在 这里 查看答案。在您的示例中,如果
String
是可变的,请考虑以下示例: