首页 > 解决方案 > 即使 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=s2 之后运行了将 s1 更改为值“xyxyz”的代码行?

标签: javaobject

解决方案


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


推荐阅读