什么是数组的浅层副本

时间:2010-09-02 07:15:31

标签: c# .net

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

您应该区分两种副本:

虽然深度复制为整个数组及其所有内容分配新空间(如果它包含引用,则分配新空间以创建具有相同值的复制的实例),浅复制只分配具有相同大小的空间复制的数组。

示例:

数组 A 已分配为仅包含两个mutable objects(例如:列表或arraylist)。 您是否只想拥有“extern”数组(包含两个引用的数组)的副本,或者您是否需要深层副本,这将分配包含的两个引用的新实例A?

在第一种情况下,例如:

A是从参考0x0000AA

开始的数组

ElementOne从0x00BBCC开始

ElementTwo从0x00BBFF开始

如果执行浅拷贝:

B(新数组)将从引用0x0000BB开始, ElementsOne和ElementsTwo将指向旧引用(0x00BBCC,0x00BBFF)。

如果执行深层复制,不仅会为数组分配新空间,而且还会分配空间来包含新实例(新列表,新的arraylist ......)。

答案 2 :(得分:3)

仅复制数组的元素。如果它们是引用类型,则仅复制引用

> 复制 后,对象后面的任何子类型或元素。