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
。如果6
进行浅拷贝,为什么也没有显示clone()
? 最佳答案
浅拷贝并不意味着它们指向相同的存储位置。那只是一个工作:List b = a;
。
克隆将创建一个包含相同元素的新实例。这意味着您有2个不同的列表,但是它们的内容是相同的。如果您在第一个列表中更改了对象的状态,则它将在第二个列表中更改。 (由于您使用的是不可变的类型-Integer
-您无法观察到这一点)
但是,您应该考虑不使用clone()
。它适用于集合,但通常被认为是损坏的。使用复制构造函数-new ArrayList(originalList)
关于java - clone(): ArrayList. clone()我以为是浅拷贝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4592478/