clone():ArrayList.clone()我认为是浅拷贝
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)
以上是 clone():ArrayList.clone()我认为是浅拷贝 的全部内容, 来源链接: utcz.com/qa/413967.html