有 Java 编程相关的问题?

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

不可变的java深度拷贝

每次我们想要更改/引用原始对象时,深度复制都会创建不可变对象,而创建另一个引用时,浅复制会创建可变对象,这样说对吗

例如:

   String s1 = "s";
   String s2 = s1;

以及:

   Person p1 = new Person();
   Person p2 = p1;

就我而言,s2将获得自己的“s”副本(而不是引用的副本)。 这如何将字符串池概念与字符串文本的单个实例相匹配? 如果是Person,我们将有两个引用到一个人的实例,对吗


共 (1) 个答案

  1. # 1 楼答案

    无法更改不可变的对象。它们的状态在创造后保持不变。因此,“s”是常数。但指向它的参考可能会改变

    String s1 = "s";
    String s2 = s1;
    

    这里,“s”是一个不可变的对象(字符串),s1s2只是引用

    防御副本用于通过返回具有相同值的新对象来防止对象上的状态更改,这是不变性故事的一部分

    附言:你没有在这里做深度复制。你只是在重新分配参考资料