色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java淺克隆和深克隆的實現

夏志豪1年前8瀏覽0評論

java淺克隆和深克隆的實現

在Java中,克隆是指復制一個對象,生成一個與原對象具有相同的屬性和方法的新對象。Java中主要有兩種克隆方式——淺克隆和深克隆。

淺克隆

淺克隆是指只復制對象的基本數據類型和對其他對象的引用,而不執行任何對象的復制操作。換句話說,淺克隆只是對對象和其中引用的對象創建新的引用,而沒有對對象的內容進行復制。

public class Person implements Cloneable {
private String name;
private Integer age;
private Listhobbies;
// 省略getter、setter等方法
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

在上面的代碼中,Person類實現了Cloneable接口,并重寫了clone方法。默認情況下,調用克隆方法會返回一個淺克隆的對象。

public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Person person1 = new Person();
person1.setName("張三");
person1.setAge(20);
Listhobbies = new ArrayList<>();
hobbies.add("籃球");
person1.setHobbies(hobbies);
Person person2 = (Person) person1.clone();
System.out.println(person1 == person2); // false
System.out.println(person1.getHobbies() == person2.getHobbies()); // true
}
}

在上面的代碼中,我們創建了一個Person對象person1,并將其克隆到person2中。驗證發現person1和person2的地址不相同,而person1和person2中的hobbies對象引用相同,這說明只有對象的基本數據類型和引用被復制了。

深克隆

深克隆是指對一個對象及其引用的對象進行復制,生成一個完全相同的新對象。換句話說,深克隆會對原對象及其引用的對象進行遞歸復制。

public class Person implements Cloneable {
private String name;
private Integer age;
private Listhobbies;
// 省略getter、setter等方法
@Override
public Object clone() throws CloneNotSupportedException {
Person person = (Person) super.clone();
Listhobbies = new ArrayList<>(this.hobbies);
person.setHobbies(hobbies);
return person;
}
}

在上面的代碼中,Person類重新定義了clone方法。首先調用了父類的clone方法創建對象的淺拷貝,然后對hobbies對象進行深度復制。

public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Person person1 = new Person();
person1.setName("張三");
person1.setAge(20);
Listhobbies = new ArrayList<>();
hobbies.add("籃球");
person1.setHobbies(hobbies);
Person person2 = (Person) person1.clone();
System.out.println(person1 == person2); // false
System.out.println(person1.getHobbies() == person2.getHobbies()); // false
}
}

在上面的代碼中,我們創建了一個Person對象person1,并將其克隆到person2中。驗證發現person1和person2的地址不相同,同時person1和person2中的hobbies對象也不相同,這說明對象和對象中的引用都被復制了。