Java中的拷貝分為兩種:淺拷貝和深拷貝。這兩種拷貝方法的使用場景不同,能夠滿足程序員不同的需求。下面我們來具體了解一下淺拷貝和深拷貝的應用范圍。
淺拷貝的使用場景
下面是一個使用淺拷貝的示例: class MyClass implements Cloneable{ public int[] arr = {1, 2, 3, 4}; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class ShallowCopyDemo { public static void main(String[] args) throws CloneNotSupportedException { MyClass obj1 = new MyClass(); MyClass obj2 = (MyClass) obj1.clone(); System.out.println(obj1 == obj2); //false System.out.println(obj1.arr == obj2.arr); //true } }
上面的示例中,我們使用淺拷貝方法clone()拷貝了一個MyClass的對象。在淺拷貝中,我們會發現兩個對象的引用指向了同一個數組。也就是說,當我們修改obj1的數組時,obj2也會隨之改變。因此,當我們需要拷貝一個對象,但是不需要改變其中引用類型數據的值時,可以使用淺拷貝。
深拷貝的使用場景
下面是一個使用深拷貝的示例: class MyClass implements Cloneable{ public int[] arr = {1, 2, 3, 4}; @Override protected Object clone() throws CloneNotSupportedException { MyClass obj = (MyClass) super.clone(); obj.arr = Arrays.copyOf(arr, arr.length); return obj; } } public class DeepCopyDemo { public static void main(String[] args) throws CloneNotSupportedException { MyClass obj1 = new MyClass(); MyClass obj2 = (MyClass) obj1.clone(); System.out.println(obj1 == obj2); //false System.out.println(obj1.arr == obj2.arr); //false } }
在上面的示例中,我們使用深拷貝方法clone()拷貝了一個MyClass的對象。在深拷貝中,我們可以發現,兩個對象中的數組引用指向了兩個不同的數組。也就是說,當我們修改obj1的數組時,obj2并不會隨之改變。因此,當我們需要拷貝一個對象,并且需要改變其中引用類型數據的值時,可以使用深拷貝。
上一篇python界面開發框架
下一篇oracle 調尾差