首先介紹變數拷貝,變數拷貝時,原始變數和拷貝的新變數引用同乙個物件。
例如:
employee e1 = new employee();
employee e2 = e1;
如果要建立乙個物件的新拷貝,其狀態和原物件一樣,但是以後各自狀態各自維護,就要使用到clone方法了,當然你也可以通過其他方法實現。
clone是object類的乙個protected方法,也就意味的你不能亂拷貝的,其次如果物件中的所有屬性都屬於數值或者基本型別,這樣拷貝沒有問題的,但是,如果物件中包含子物件的引用,那麼拷貝的結果就是兩個物件引用同乙個子物件。
1、淺拷貝
預設的拷貝都是淺拷貝,你可以通過下面的方法實現:
class employee implements cloneable
}
淺拷貝需要記住的是原物件的各屬性最好都是基本型別或者不可變的物件。
2、深拷貝
深拷貝是相對淺拷貝的,解決不能管理子物件的問題的。
實現方法如下:
class employee implements cloneable
}
java深拷貝和淺拷貝
會建立乙個新物件,這個物件有原始物件屬性的精確拷貝。屬性是基本型別及其擴充套件型別 拷貝的就是基本型別的值。如果修改原始物件中的基本型別,拷貝物件中的基本型別不變。即原始物件和拷貝物件共用同乙個引用型別或陣列。修改原始物件或拷貝物件中引用型別,另乙個也會跟著變化 通常這種情況不是我們所想要的,這就需...
物件的淺拷貝和深拷貝
淺拷貝 1.用for迴圈獲取引用物件的屬性和值,賦值給新物件 object.prototype.num 1 person1 function clone origin,target for var key in origin return tar var person2 clone person1 ...
物件的淺拷貝和深拷貝
淺拷貝 python拷貝一般都是淺拷貝。拷貝時,物件包含的子物件內容不拷貝。因此,源物件和拷貝物件引用同乙個物件 深拷貝 使用copy模組的deepcopy函式,遞迴拷貝物件中包含的子物件。源物件和拷貝物件所有的子物件也不同 變數的數值操作 只是形成兩個變數,實際上時指向同乙個物件 測試淺拷貝和深拷...