【发布时间】:2013-05-02 04:47:21
【问题描述】:
我试图准确地理解 Java 字符串是如何不可变的。我知道这应该是一个简单的概念,但是在阅读了几个在线网页后,我仍然不太明白。
我不明白 Java 字符串是如何“不可变”的。我目前有以下代码:
public static void main(String[] args) {
String name = "Jacob Perkins";
System.out.println( name );
name = name + "!";
System.out.println( name );
}
我的输出如下:
Jacob Perkins
Jacob Perkins!
如果字符串应该是不可变的,为什么会发生这种情况?为什么我可以为字符串重新赋值?
【问题讨论】:
-
String变量 不是不可变的(因为它们不同!)您创建了一个新字符串并将其引用分配给变量name。 -
我还是不明白。为什么我会在 Java 字符串中看到术语“不可变”?
-
@user2301187:两个变量可以指向同一个字符串对象。如果字符串是可变的,则可以通过另一个变量的引用看到一个变量对字符串的更改。因为它们不是,所以每个变量都知道它指向的字符串不能“在不查看时更改”。这样做是因为可变字符串会很吓人并增加很多复杂性,例如每当您想要一个不会更改的字符串副本时,您必须记住创建一个字符串副本,否则以后会发生奇怪的事情,也可能是不安全的事情!
-
但看起来
name = name + "!"正在更改原始名称变量的值。我还是不明白。 -
@user2301187 我已经发布了一个解释它的答案
标签: java string immutability