gpt4 book ai didi

java - 不可变的深拷贝

转载 作者:行者123 更新时间:2023-12-02 04:13:27 24 4
gpt4 key购买 nike

这样说是否正确:每次我们想要更改/引用原始对象时,不可变对象(immutable对象)都是通过深复制创建的,而可变对象是当我们创建另一个引用时通过浅复制创建的。

例如:

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

和:

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

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

最佳答案

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

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

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

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

PS:您在这里没有进行深度复制。您只是重新分配引用。

关于java - 不可变的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com