2014-09-11 52 views
0

我正在研究一些代碼,並試圖找出如何將對象引用複製到另一個對象。我一直看到使用的clone()方法,但我讀過它的缺陷,我想要複製的類已經實現了可序列化。所以我有一個問題是關於使用'='和克隆方法之間的區別 - 我的理解是,這兩個都是淺拷貝,所以它們應該工作相同,但如果這是真的,那麼有一個方法的好處是什麼爲了這?在Java中使用'='與clone()

我正在處理的代碼有2個對象數組 - 兩個相同類型的對象,兩個數組中的所有對象最初都是空的,我將數組B的值分配給數組A相等。 由於代碼對數組A中的對象進行初始化並將值分配給數組A中對象的變量。 儘管代碼結束,但數組B中的所有對象仍爲空。

我在這裏有錯嗎? 如果這個概念沒有錯,我認爲這只是我在我的代碼中忽略的東西。

任何幫助表示讚賞。

+1

你的問題是比較蘋果與橘子,它們是如此完全不同以至於無法比較。 '='指定一個引用,就是這樣。克隆創建了一個全新的對象,其狀態應該與克隆對象相同,但這兩件事情又非常不同。 – 2014-09-11 01:37:58

+1

如果您可以提供示例代碼以便我們可以參考它,這將有所幫助 - 顯示代碼比描述它更好。 – 2014-09-11 01:39:56

回答

1

當您使用=時,您複製對象的引用(在內存中)。當使用.clone()時,你創建一個新的對象。

+0

簡單而正確。 – Christian 2014-09-11 01:39:05

3

我會讓我的評論答案:

你的問題比較蘋果和橘子,他們是如此完全不同的,他們所不能比擬的。 =分配參考,就是這樣。克隆創建一個完全新對象,其中狀態應該與克隆對象相同,但它又是一個完全不同的對象/引用。順便說一下,有深度和淺層克隆,因此淺拷貝克隆的複合區域可能是相同的,但這是另一個問題的主題。

+0

感謝您的意見,這就是我不明白的地方。 – 2014-09-11 01:41:56