Java是一門面向對象的編程語言,在進行對象復制時,常見的有淺復制和深復制。
淺復制是指復制對象時,只復制對象中的基本類型和引用類型的值,而不復制引用的對象本身。因此,淺復制得到的結果是兩個對象引用了同一個內存地址中的對象。
// 淺復制示例 public class ShallowCopy implements Cloneable{ private int[] arr; public ShallowCopy() { arr = new int[10]; for (int i = 0; i< arr.length; i++) { arr[i] = i; } } public void set(int index, int value) { arr[index] = value; } public int get(int index) { return arr[index]; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); // 調用Object類的clone方法,生成克隆對象 } } ShallowCopy sc = new ShallowCopy(); ShallowCopy sc1 = (ShallowCopy) sc.clone(); sc.set(0, 10); System.out.println(sc.get(0)); System.out.println(sc1.get(0)); // 輸出結果:10 10
上述代碼中,我們創建了兩個對象sc和sc1,使用淺復制方式復制了sc,并將sc中的第一個元素改為了10,最終我們發現sc1中的第一個元素也為10,說明它們引用了同一個內存地址中的對象。
深復制是指復制對象時,不僅復制對象中的基本類型和引用類型的值,還復制引用的對象本身,因此得到的結果是兩個對象各自擁有一份相同的內容,但是使用了不同的地址空間。
// 深復制示例 public class DeepCopy implements Cloneable{ private int[] arr; public DeepCopy() { arr = new int[10]; for (int i = 0; i< arr.length; i++) { arr[i] = i; } } public void set(int index, int value) { arr[index] = value; } public int get(int index) { return arr[index]; } @Override public Object clone() throws CloneNotSupportedException { DeepCopy copy = (DeepCopy) super.clone(); copy.arr = arr.clone(); // 復制數組對象 return copy; } } DeepCopy dc = new DeepCopy(); DeepCopy dc1 = (DeepCopy) dc.clone(); dc.set(0, 10); System.out.println(dc.get(0)); System.out.println(dc1.get(0)); // 輸出結果:10 0
上述代碼中我們又創建了兩個對象dc和dc1,使用深復制方式復制了dc,并將dc中的第一個元素改為了10,最終我們發現dc1中的第一個元素依然為0,說明它們使用了不同的地址空間。
下一篇Python界面下拉表