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

java里的深復制和淺復制

傅智翔1年前8瀏覽0評論

Java中的對象復制可以分為深復制和淺復制兩種方式。深復制指的是將對象的所有屬性都復制一份新的,而不是只是復制引用。而淺復制則是只復制引用。

深復制在Java中可以通過實現Cloneable接口并重寫Object類中的clone()方法來實現。clone()方法默認是淺復制,所以需要在重寫方法中逐一將所有屬性進行復制。以下是一個示例:

public class Person implements Cloneable {
private String name;
private int age;
private Address address;
// 實現深復制
public Object clone() throws CloneNotSupportedException {
Person p = (Person) super.clone();
p.address = (Address) this.address.clone();
return p;
}
// getters and setters...
}
public class Address implements Cloneable {
private String city;
private String street;
// 實現深復制
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
// getters and setters...
}

這里,Person類中的address屬性是另一個對象,所以需要在clone()方法中遞歸進行深復制。而Address類中并沒有其他屬性,因此可以直接返回super.clone()。

相比之下,淺復制要簡單得多。只需要實現Cloneable接口并重寫clone()方法,然后在其中調用super.clone()即可。以下是一個示例:

public class Person implements Cloneable {
private String name;
private int age;
private Address address;
// 實現淺復制
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
// getters and setters...
}
public class Address implements Cloneable {
private String city;
private String street;
// 實現淺復制
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
// getters and setters...
}

需要注意的是,如果對象中的屬性也是引用類型,那么淺復制只會復制引用,而不會復制對象本身。因此在使用淺復制時需要特別小心。