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。如果6进行浅拷贝,为什么也没有显示clone()

最佳答案

浅拷贝并不意味着它们指向相同的存储位置。那只是一个工作:List b = a;

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

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

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

10-13 09:33