Java中的拷貝分為深拷貝和淺拷貝兩種類型,深拷貝是將被拷貝的對象重構(gòu),并將其所有內(nèi)容一起復制到新的對象中,新的對象與被拷貝對象不共享任何東西;而淺拷貝只是進行了一份新的引用,兩個對象共享同一個引用,所以如果其中一個對象修改了值,另一個對象也會受到影響。
深拷貝通常在以下場景中使用:
// Java中的深拷貝實現(xiàn)方法 public class DeepCopy { String name; int age; // 拷貝構(gòu)造函數(shù) public DeepCopy(DeepCopy dc){ this.name = dc.name; this.age = dc.age; } // 普通構(gòu)造函數(shù) public DeepCopy(String n, int a){ this.name = n; this.age = a; } public static void main(String[] args) { DeepCopy dc = new DeepCopy("Tom", 20); DeepCopy dc1 = new DeepCopy(dc); System.out.println(dc1.name); // Tom System.out.println(dc1.age); // 20 dc1.name = "Jerry"; dc1.age = 25; System.out.println(dc1.name); // Jerry System.out.println(dc1.age); // 25 System.out.println(dc.name); // Tom System.out.println(dc.age); // 20 } }
淺拷貝通常在以下場景中使用:
// Java中的淺拷貝實現(xiàn)方法 public class ShallowCopy { String name; int age; public static void main(String[] args) { ShallowCopy sc = new ShallowCopy(); sc.name = "Tom"; sc.age = 20; ShallowCopy sc1 = sc; System.out.println(sc1.name); // Tom System.out.println(sc1.age); // 20 sc1.name = "Jerry"; sc1.age = 25; System.out.println(sc1.name); // Jerry System.out.println(sc1.age); // 25 System.out.println(sc.name); // Jerry System.out.println(sc.age); // 25 } }
在Java中,拷貝是常見的編程技巧之一,它通常用于在修改對象之前,先對其進行拷貝,以保留原始對象的副本,同時可以減少修復變更引起的錯誤。