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

java深度拷貝和賦值

林晨陽1年前6瀏覽0評論

在Java中,有時候需要對一個對象進行拷貝,操作對象屬性時不影響原對象。但是由于Java中的賦值和拷貝機制,賦值只是復制一個引用指向原有的對象,導致對其中一個對象的修改會對原有對象產生影響。此時就出現(xiàn)了深度拷貝的概念。

//賦值代碼
Person person1 = new Person();
Person person2 = person1;
person1.setName("Tom");
System.out.println(person2.getName());//輸出Tom

將一個實體對象賦值給另一個對象時,即使原對象屬性改變,由于兩個對象引用了同一個內存地址,最后輸出結果仍然一致。

下面是Java中深度拷貝的實現(xiàn)方法:

//實現(xiàn)Cloneable接口,重寫clone方法
public class Person implements Cloneable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重寫對象的clone方法
@Override
public Object clone() throws CloneNotSupportedException{
Person clone = (Person) super.clone();
return clone;
}
}
//使用clone方法進行深度拷貝
Person person1 = new Person();
Person person2 = (Person) person1.clone();
person1.setName("Tom");
System.out.println(person1.getName());//輸出Tom
System.out.println(person2.getName());//輸出null

通過實現(xiàn)Cloneable接口,對象重寫clone方法實現(xiàn)對象的深度拷貝。

需要注意的是,在進行深度拷貝時,要確保對象內部的屬性也可以被拷貝,否則拷貝出來的對象仍然會受到原對象的影響。對于Java里的大多數(shù)內置類型,都提供了相應的深度拷貝方法或者構造函數(shù),開發(fā)者只需要根據(jù)需要選擇即可。