即使 s2=s1,为什么在第二行代码中打印“xy”?

class Main {

  public static void main(String[] args) {

     String s1 = "xy";

     String s2 = s1;

     s1 = s1 + s2 + "z";

     System.out.println(s1);

     System.out.println(s2);

  }

}

当我运行代码时,我期望得到这样的结果,因为 s1=s2 的值:


xyxyz

xyxyz

但实际输出是:


xyxyz

xy

我不确定为什么我没有得到相同的答案?是因为将 s1 更改为值“xyxyz”的代码行是在使 s1=s2 之后运行的吗?


守着一只汪
浏览 102回答 3
3回答

RISEBY

JavaString是不可变的。当您重新分配时s1,您将创建一个现在引用的新String值s1。s2仍然引用原始字符串。

小唯快跑啊

String s2 = s1;这是一项任务,而不是永恒平等的指定。该行的意思是,“当程序执行这一行时,将变量的值设置为与变量执行时包含的s2值相同。”s1以后对该变量的任何更改都s1不会影响s2. 这项任务只是暂时传递信息,仅此而已。

慕容3067478

本质上,当您执行 s1 = s2 时,您并没有将这两个对象绑定到一个对象中,而是暂时使它们的值相同(这有点简化)。如果您要更改其中一个的值,则不会影响另一个的值。想象一下有一个 .txt 文件。您可以在其中输入任何您想输入的内容,然后复制并粘贴它。然后,您返回原始文件并继续输入。尽管原始文件中的文本已更改,但副本文件中的文本并未更改。这与这里发生的情况基本相似。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java