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()
做了一个浅拷贝。所以,b
和 a
应该指向同一个内存位置。但是,当我执行 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/