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

java深拷貝和淺拷貝實現

林玟書1年前8瀏覽0評論

Java作為面向對象語言,對象之間的拷貝操作是非常常見的。Java中的拷貝操作可以分為深拷貝和淺拷貝。它們在實現上有著不同的特點和應用場景。

淺拷貝

淺拷貝是指將一個對象的引用復制給一個新的對象。

public class Person {
private int age;
private String name;
//getters and setters
}
Person p1 = new Person();
p1.setAge(20);
p1.setName("Tom");
Person p2 = p1;//淺拷貝

在代碼中,我們將p1的引用賦值給p2,這是一種淺拷貝。此時,p1和p2指向的是同一個對象,修改p1的屬性值也會影響到p2。

深拷貝

深拷貝是指復制對象及其引用的子對象,即創建一個新的對象并將原始對象的非靜態字段復制到新對象中。

public class Person implements Cloneable {
private int age;
private String name;
private Listhobbies;
//getters and setters
@Override
public Person clone() throws CloneNotSupportedException{
Person person = (Person)super.clone();
person.setHobbies(new ArrayList<>(this.getHobbies()));
return person;
}
}
Person p1 = new Person();
p1.setAge(20);
p1.setName("Tom");
Listhobbies = new ArrayList<>();
hobbies.add("reading");
p1.setHobbies(hobbies);
Person p2 = p1.clone();//深拷貝

在代碼中,我們實現了Cloneable接口,并覆蓋了clone()方法。在方法中,我們將原始對象的引用對象也進行了深拷貝。同時,需要注意clone()方法是淺拷貝的,所以需要在方法中對原始對象的引用對象進行深拷貝。

此時,p1和p2指向的是兩個不同的對象,它們的屬性值互相不影響。

總結

淺拷貝適用于對象的屬性比較簡單,沒有引用類型的情況。深拷貝適用于對象的屬性比較復雜,存在引用類型的情況。

需要注意的是,如果對象的引用類型沒有實現Cloneable接口,那么進行深拷貝會拋出CloneNotSupportedException異常。