欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java的深復(fù)制和淺復(fù)制

吳曉飛1年前8瀏覽0評論

Java中的復(fù)制操作有兩種:深復(fù)制和淺復(fù)制。理解這兩種復(fù)制操作的區(qū)別對于編寫高質(zhì)量的Java代碼非常重要。以下是深復(fù)制和淺復(fù)制的詳細(xì)解釋。

淺復(fù)制

淺復(fù)制是一種創(chuàng)建新對象的方法,該對象具有與原始對象相同的原始值副本。但是,如果原始對象的某個字段是引用類型,則淺復(fù)制僅復(fù)制該字段的引用,而不是創(chuàng)建新的實例并將其分配給該字段。

public class Person {
private String name;
private List<String> hobbies;
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
public List<String> getHobbies() {
return hobbies;
}
}
Person person1 = new Person("張三", Arrays.asList("籃球", "音樂", "旅游"));
Person person2 = new Person(person1.getName(), person1.getHobbies());
person1.getHobbies().add("美食");    // 改變person1中的hobbies
System.out.println(person2.getHobbies());    // person2的hobbies也會被改變

可以看到,雖然我們創(chuàng)建了一個新的Person對象,但person1和person2共享相同的List對象。所以,如果我們更改person1的hobbies,則person2的hobbies也會隨之更改。

深復(fù)制

深復(fù)制是一種創(chuàng)建新對象的方法,該對象具有原始對象及其任何松散引用的副本。這意味著如果原始對象的某個字段是引用類型,則深復(fù)制將創(chuàng)建該字段的新實例,并將其分配給新對象的相應(yīng)字段。

public class Person {
private String name;
private List<String> hobbies;
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = new ArrayList<>(hobbies);
}
public List<String> getHobbies() {
return new ArrayList<>(hobbies);
}
}
Person person1 = new Person("張三", Arrays.asList("籃球", "音樂", "旅游"));
Person person2 = new Person(person1.getName(), person1.getHobbies());
person1.getHobbies().add("美食");    // 改變person1中的hobbies
System.out.println(person2.getHobbies());    // 輸出:[籃球, 音樂, 旅游]

可以看到,盡管我們更改了person1的hobbies,但person2的hobbies保持不變,因為它們共享不同的List對象。通過執(zhí)行深復(fù)制,我們可以確保我們的新對象是真正獨立的。