gpt4 book ai didi

java - clone() : ArrayList. clone() 我以为做了浅拷贝

转载 作者:IT老高 更新时间:2023-10-28 20:49:19 29 4
gpt4 key购买 nike

ArrayList<Integer> a=new ArrayList<Integer>();
a.add(5);
ArrayList<Integer> b=(ArrayList<Integer>)a.clone();
a.add(6);
System.out.println(b.toString());

在上面的代码中,我认为 clone() 做了一个浅拷贝。所以,ba 应该指向同一个内存位置。但是,当我执行 b.toString() 时,答案只有 5。为什么clone()做浅拷贝也不显示6

最佳答案

浅拷贝并不意味着它们指向同一个内存位置。那只是一个赋值:List b = a;

克隆会创建一个 实例,其中包含相同的 元素。这意味着您有 2 个不同的列表,但它们的内容是相同的。如果您在第一个列表中更改对象的状态,它将在第二个列表中更改。 (由于您使用的是不可变类型 - Integer - 您无法观察到这一点)

但是,您应该考虑不使用 clone()。它适用于集合,但通常被认为已损坏。使用复制构造函数 - new ArrayList(originalList)

关于java - clone() : ArrayList. clone() 我以为做了浅拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4592478/

29 4 0