2010-09-02 98 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中。這些對象不會被克隆。