什么是数组的浅层副本

sel*_*raj 7 .net c#

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

HCL*_*HCL 5

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


Mar*_*kon 4

您应该区分两种类型的复制:浅复制深复制

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

例子:

数组A已被分配为仅包含两个可变对象(例如:列表或数组列表)。您是否只想拥有“extern”数组(包含两个引用的数组)的副本,还是想要一份深层副本,该副本还将分配A中包含的两个引用的新实例?

对于第一种情况,例如:

A 是从引用 0x0000AA 开始的数组

ElementOne 从 0x00BBCC 开始

ElementTwo 从 0x00BBFF 开始

如果执行浅复制:

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

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