我想了解Java字符串是如何不可变的。我认为这应该是一个简单的概念,但在阅读了几个在线网页后,我仍然不太明白。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' * variables *不是不可变的(因为它们是不同的!)您已经创建了一个新的字符串并将其引用赋给了变量'name'。 – dlev 2013-05-08 04:11:12
我还是不明白。为什么我会用Java字符串看到“不可变的”一词? – user2301187 2013-05-08 04:13:04
@ user2301187:两个变量可以指向同一个字符串对象。如果字符串是可变的,则可以通过其他变量的引用来看到一个变量对字符串的更改。因为它们不是,所以每个变量都知道它指向的字符串不能在“它看起来不会改变”的时候改变。这是因为可变字符串会令人感到恐惧并且增加了很多复杂性,例如你必须记得每当你想要一个不会改变的副本的时候就创建一个字符串的副本,或者以后会发生奇怪的事情,这也可能是不安全的事情! – Patashu 2013-05-08 04:15:36