一般使對象的副本,我們將其分配給像一個新的對象:複製一個對象的數據到其他Java中
Object a = new Object();
Object b = a;
,而這樣做的,我們需要照顧所有的事情的?我猜對象a和b是相互依賴的,因爲它們將指向相同的位置,所以改變其中一個的值也會改變。如果錯誤請糾正。
此外,這種方式與克隆不同,或者我們可以將其視爲僅克隆。
如果它的克隆,這會做深層克隆還是淺層?
一般使對象的副本,我們將其分配給像一個新的對象:複製一個對象的數據到其他Java中
Object a = new Object();
Object b = a;
,而這樣做的,我們需要照顧所有的事情的?我猜對象a和b是相互依賴的,因爲它們將指向相同的位置,所以改變其中一個的值也會改變。如果錯誤請糾正。
此外,這種方式與克隆不同,或者我們可以將其視爲僅克隆。
如果它的克隆,這會做深層克隆還是淺層?
根本不克隆。它只是給與a和b指向完全相同的對象相同的對象的另一個名稱。
第一條語句創建了一個指向內存中新創建對象的指針。第二條語句將變量點設置爲相同的位置。這意味着兩個指針指向內存中的同一個對象。是的,你可以從任何指針改變對象的狀態。指針就像內存中的地址一樣。
克隆是不同的事情。基本上你可以在另一個位置創建對象的整個副本並使用變量指向它。所以
Object a = new Object(); Object b = a.clone();
現在b指向內存中的新對象。最初兩個對象將是相同的,但完全斷開連接。改變對象a將不會對對象b產生影響。
Shahzad
這兩個引用指向同一個對象。
Object.clone()方法的開箱即用實現可以進行淺度複製。如果一個對象內部有一個關聯,它可以說一個擁有地址對象的僱員對象,那麼當我們克隆僱員對象時,它的基本屬性會在我們使用Object.clone()時被複制。 原始副本和克隆副本都將指向相同的地址對象。
實現深度克隆的一種方式是用戶序列化。 首先序列化對象,然後反序列化它。 Java將在反序列化的同時創建所有新對象。
它不克隆.. Object a = new Object();對象b = a ;.這意味着對象'a'和'b'指向相同的內存位置。當我們克隆一個對象時。其他對象的狀態存儲在新對象中,而不是存儲位置。
錯了。該分配不會創建對象的副本。它創建另一個對*相同*對象的引用。 – EJP