有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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!

如果字符串应该是不可变的,为什么会发生这种情况?为什么我能给字符串重新赋值


共 (3) 个答案

  1. # 1 楼答案

    让一张图片为你解释一下:

    String example

    在左边,有一个变量,它实际上是一个引用

    1. String name = "Jacob Perkins;"字符串“Jacob Perkins”被创建,并且name指向它
    2. name = name + "!";一个新字符串“雅各布·珀金斯!”现在,引用指向新字符串。然而,旧的字符串保持不变,因为字符串是不可变的
  2. # 2 楼答案

    字符串对象是不可变的,仅当变量引用发生更改时

    在您的示例中,“Jacob Perkins”对象仍然存在,新对象“Jacob Perkins!”被创造出来

    name变量指向新对象

  3. # 3 楼答案

    实际情况是创建了3个字符串对象。“雅各布·帕金斯”、“!”还有“雅各布·帕金斯!”。您并没有真正修改“Jacob Perkins”实例。您刚刚将name变量的引用从“Jacob Perkins”实例更改为“Jacob Perkins!”