Java中的拷貝分為深拷貝和淺拷貝兩種類型,深拷貝是將被拷貝的對(duì)象重構(gòu),并將其所有內(nèi)容一起復(fù)制到新的對(duì)象中,新的對(duì)象與被拷貝對(duì)象不共享任何東西;而淺拷貝只是進(jìn)行了一份新的引用,兩個(gè)對(duì)象共享同一個(gè)引用,所以如果其中一個(gè)對(duì)象修改了值,另一個(gè)對(duì)象也會(huì)受到影響。
深拷貝通常在以下場(chǎng)景中使用:
// Java中的深拷貝實(shí)現(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 } }
淺拷貝通常在以下場(chǎng)景中使用:
// Java中的淺拷貝實(shí)現(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中,拷貝是常見(jiàn)的編程技巧之一,它通常用于在修改對(duì)象之前,先對(duì)其進(jìn)行拷貝,以保留原始對(duì)象的副本,同時(shí)可以減少修復(fù)變更引起的錯(cuò)誤。