2012-05-10 25 views
2

當我閱讀「在多少種方式,我們可以在java中創建一個對象」。克隆和序列化如何與使用「新」和反射不同?

我發現四通:使用新的操作對象的

  1. 創新。
  2. 克隆
  3. 序列化
  4. 反思。

隨着新的和反思,我很好這兩種方法。

我的問題是:

爲什麼人們認爲克隆和序列化創建對象的不同的方式?

+0

Marko在下面的答案很好地解釋了爲什麼人們認爲「克隆和序列化」不同於「新的和反思」。當然,他們彼此不同,因爲如果你想給魔法添加自己的魔法,你必須做不同的事情。 –

回答

1

當你克隆一個對象時,這意味着你正在處理與原始對象不同的內存部分。是的,他們可能具有相同的屬性,但它們是兩個不同的指針,具有兩個不同的內存塊。

當您反序列化一個對象時,則存在一個以前不存在的對象。即使您序列化,然後立即反序列化,它將獨立於原始對象而存在。

+0

那麼說先生..謝謝你的寶貴意見。 –

7

在這裏非常重要的一點是,在反序列化對象有沒有參與這個過程構造 - 這就是爲什麼它是創建對象的不同方式。克隆也是如此 - 方法Object.clone通過JVM魔法創建一個新對象,同樣不涉及任何構造函數。事實上,這兩種方法之間有很大的區別,一方面是反射,另一方面是反射,因爲反射只是調用涉及特定構造函數的純香草對象實例化的稍微不同的方式。