在Java編程中,對象的拷貝可以分為淺拷貝和深拷貝。淺拷貝簡單來說就是復制對象的引用,兩個對象引用了同一塊內存,而深拷貝則是復制對象的內容,兩個對象引用了不同的內存。
接下來分別介紹淺拷貝和深拷貝的實現:
//淺拷貝的實現 class ShallowCopy implements Cloneable { private int[] nums; public ShallowCopy(int[] nums) { this.nums=nums; } public int[] getNums() { return nums; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } } //使用示例 int[] nums = {1, 2, 3}; ShallowCopy shallow = new ShallowCopy(nums); ShallowCopy shallowCopy = (ShallowCopy) shallow.clone(); System.out.println(shallow.getNums() == shallowCopy.getNums()); //true,兩個對象引用的是同一塊內存
//深拷貝的實現 class DeepCopy implements Cloneable { private int[] nums; public DeepCopy(int[] nums) { this.nums=nums; } public int[] getNums() { return nums; } public Object clone()throws CloneNotSupportedException{ DeepCopy deepCopy=(DeepCopy)super.clone(); deepCopy.nums= (int[]) nums.clone();//這里需要深拷貝nums數組 return deepCopy; } } //使用示例 int[] nums = {1, 2, 3}; DeepCopy deep = new DeepCopy(nums); DeepCopy deepCopy = (DeepCopy) deep.clone(); System.out.println(deep.getNums() == deepCopy.getNums()); //false,兩個對象引用的是不同的內存
可以看出,深拷貝需要注意變量類型,特別是內部包含引用類型的變量需要進行再次拷貝,以保證拷貝出來的對象是獨立的。
下一篇css中加背景圖