数组的浅拷贝是什么?

8
当您调用ArrayList的clone()方法时,将创建列表的浅层副本。什么是数组的浅层副本?
3个回答

5
如果在ArrayList中有引用,相同的引用将被复制到克隆的ArrayList中。对象不会被克隆。

4
你需要区分两种拷贝方式:浅拷贝深拷贝
深拷贝会为整个数组及其内容(如果其中包含引用,则会分配新的空间来创建具有与所复制对象相同值的实例)分配新的空间,而浅拷贝只会为所复制的数组分配相同大小的空间。
例如:
数组A被分配为仅包含两个可变对象(例如:列表或数组列表)。
你是想要一个“外部”数组的副本(包含两个引用),还是想要深拷贝,它将为A中包含的两个引用分配新实例?
在第一种情况下,例如:
A是从引用0x0000AA开始的数组
ElementOne从0x00BBCC开始
ElementTwo从0x00BBFF开始
如果执行浅拷贝:
B(新数组)将从引用0x0000BB开始,
ElementOne和ElementTwo将指向旧的引用(0x00BBCC,0x00BBFF)。
如果执行深拷贝,则不仅会为数组分配新空间,还会为新实例(新列表、新数组列表等)分配空间。

3

只有数组的元素被复制。如果它们是引用类型,那么只有引用被复制。任何对象参考的子类型或元素不会被复制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接