2010-09-02 96 views

回答

4

您应该区分两种副本:

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

实施例:

阵列已被分配给仅包含两mutable objects(例如:一个列表或一个ArrayList)。 你想只有“extern”数组(包含两个引用的数组)的副本,还是你想要一个深层副本,它将分配包含在A中的两个引用的新实例?

在第一种情况下,例如:

A是0x0000AA

开始在参考阵列

ElementOne开始于0x00BBCC

ElementTwo在0x00BBFF

开始如果执行浅拷贝:

B(新阵列)将从参考0x0000BB开始, ElementsOne和ElementsTwo将指向旧引用(0x00BBCC,0x00BBFF)。

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

+0

很好的例子很好理解 – selvaraj 2010-09-02 09:01:26

3

只复制数组的元素。如果它们是参考类型,则只复制参考。引用后面的对象的任何子类型或元素都是而不是已复制。

5

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