2016-07-24 102 views
-3

一般使對象的副本,我們將其分配給像一個新的對象:複製一個對象的數據到其他Java中

Object a = new Object(); 
Object b = a; 

,而這樣做的,我們需要照顧所有的事情的?我猜對象a和b是相互依賴的,因爲它們將指向相同的位置,所以改變其中一個的值也會改變。如果錯誤請糾正。

此外,這種方式與克隆不同,或者我們可以將其視爲僅克隆。

如果它的克隆,這會做深層克隆還是淺層?

+0

錯了。該分配不會創建對象的副本。它創建另一個對*相同*對象的引用。 – EJP

回答

0

根本不克隆。它只是給與a和b指向完全相同的對象相同的對象的另一個名稱。

1

第一條語句創建了一個指向內存中新創建對象的指針。第二條語句將變量點設置爲相同的位置。這意味着兩個指針指向內存中的同一個對象。是的,你可以從任何指針改變對象的狀態。指針就像內存中的地址一樣。

克隆是不同的事情。基本上你可以在另一個位置創建對象的整個副本並使用變量指向它。所以

Object a = new Object(); Object b = a.clone();

現在b指向內存中的新對象。最初兩個對象將是相同的,但完全斷開連接。改變對象a將不會對對象b產生影響。

Shahzad

0

這兩個引用指向同一個對象。

Object.clone()方法的開箱即用實現可以進行淺度複製。如果一個對象內部有一個關聯,它可以說一個擁有地址對象的僱員對象,那麼當我們克隆僱員對象時,它的基本屬性會在我們使用Object.clone()時被複制。 原始副本和克隆副本都將指向相同的地址對象。

實現深度克隆的一種方式是用戶序列化。 首先序列化對象,然後反序列化它。 Java將在反序列化的同時創建所有新對象。

0

它不克隆.. Object a = new Object();對象b = a ;.這意味着對象'a'和'b'指向相同的內存位置。當我們克隆一個對象時。其他對象的狀態存儲在新對象中,而不是存儲位置。

相關問題