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!
如果字符串应该是不可变的,为什么会发生这种情况?为什么我能给字符串重新赋值
# 1 楼答案
让一张图片为你解释一下:
在左边,有一个变量,它实际上是一个引用
String name = "Jacob Perkins;"
字符串“Jacob Perkins”被创建,并且name
指向它李>name = name + "!";
一个新字符串“雅各布·珀金斯!”现在,引用指向新字符串。然而,旧的字符串保持不变,因为字符串是不可变的李># 2 楼答案
字符串对象是不可变的,仅当变量引用发生更改时
在您的示例中,“Jacob Perkins”对象仍然存在,新对象“Jacob Perkins!”被创造出来
name变量指向新对象
# 3 楼答案
实际情况是创建了3个字符串对象。“雅各布·帕金斯”、“!”还有“雅各布·帕金斯!”。您并没有真正修改“Jacob Perkins”实例。您刚刚将name变量的引用从“Jacob Perkins”实例更改为“Jacob Perkins!”