在Java中,我們經常需要對對象進行復制,并在不影響原有對象的情況下修改新對象。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; } } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } }
深拷貝則是復制了對象的內容,兩個對象完全獨立,互不影響。示例代碼如下:
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; } } @Override public Object clone() throws CloneNotSupportedException { DeepCopy obj = (DeepCopy) super.clone(); obj.arr = Arrays.copyOf(this.arr, this.arr.length); return obj; } }
可以看到,在淺拷貝的實現中,直接調用了父類的clone()方法,而在深拷貝的實現中,除了調用父類的clone()方法外,還對數組進行了復制。
總之,在對Java對象進行復制時,需要根據具體的需求選擇使用淺拷貝還是深拷貝。