java 中 對象的複製

Obj a =new Objt();//obj是一個實現了Cloneable接口的類
Obj b=a;
如果是這種情況,當b的值發生改變時,a的值也會改變,
兩者是同一引用,而非創建了一個新的對象,
爲了解決這種情況,java中提供了一種方法clone,
Obj a=new Obj();
Obj b=(Obj)a.clone();
此時b爲一個新的對象,而非一個引用,b值得改變不會影響a中的值。
但是此時的複製僅僅可以完成基本類型的複製,即當obj類中含有其他引用類型時,就不在適用,這也簡稱淺複製。
要解決這種情況,必須對obj類中的引用單獨進行復制,即深複製。
public Class Obj implements Cloneable{
private Date dt=new Data();
public Obj(){
}
public void setData( Data dt){
this.dt=dt;
}
public Data getData(){
return dt;
}
public Object clone(){
Obj o;
o=(Obj) super.clone();//此處應該會拋出異常,自動生成即可
o.data=this.getData().clone();
return o;
}

public static void main(String args[]){
        Obj a=new Obj();
        Obj b=(Obj)ob.clone();//此時改變b的值同樣不會影響a的值

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章