2014-11-24 33 views
4

我真的很困惑.clone()方法之間的差異或簡單地把=符號之間的區別,而試圖克隆它的對象。使用.clone()方法和=符號克隆對象有什麼區別?

謝謝。

+0

可能重複的[如何在Java中複製對象?](http://stackoverflow.com/questions/869033/how-do-i -copy-an-object-in-java) – Joe 2014-11-24 11:11:52

+1

可能的重複意味着它應該被拒絕投票嗎? – user3437460 2014-11-24 11:21:25

+1

是的,先生,我只是這個網站的新手,但我仍然很欣賞我得到的。 – Robert 2014-11-24 13:17:38

回答

13

如果您創建一個新的狗:

Dog a = new Dog("Mike"); 

然後:

Dog b = a; 

你必須指向同一Dog一個Dog和兩個變量。因此,這樣做的:

a.putHatOnHead("Fedora"); 

if (b.hasHatOnHead()) { 
    System.out.println("Has a hat: " + b.getHatName()); 
} 

將打印狗有一頂軟呢帽,因爲ab參考相同的狗。

相反,這樣做的:

Dog b = a.clone(); 

現在你有兩個狗克隆。如果你在每隻狗上戴上帽子:

a.putHatOnHead("Rayden"); 
b.putHatOnHead("Fedora"); 

每條狗都會有自己的帽子。

+0

謝謝你明確的指示,現在事情變得更加清晰:) – Robert 2014-11-24 13:19:00

0

=你只是給同一個對象一個不同的名字。使用.clone您正在創建一個新對象,它是原始對象的副本。

+0

謝謝先生:) – Robert 2014-11-24 13:39:47

1

=符號是java中的賦值運算符。有a = b的意思是「我賦給變量a變量b的值,如果b是一個對象,然後a = b使得a點到b所指向的對象。它確實複製的對象,也不是克隆。

如果你想克隆一個對象,你要麼必須通過手(醜陋的),這樣做,或不得不做出這樣的必須是可克隆落實Clonable類然後調用clone()

優勢上clone()在「醜陋的」方式是clone()它是開發者要克隆的類定義瞭如何進行克隆以確保副本是合法工作副本。

+0

謝謝你,先生:) – Robert 2014-11-24 13:22:20

3

讓我試着解釋一下:

Object obj = new Object(); //creates a new object on the heap and links the reference obj to that object 

案例1:

Object obj2 = obj; //there is only one object on the heap but now two references are pointing to it. 

案例2:

Object obj2 = obj.clone(); //creates a new object on the heap, with same variables and values contained in obj and links the reference obj2 to it. 

對克隆方法的更多信息,你可以參考在Java API文檔

+0

謝謝你的努力,現在我可以舒服地說,我明白了整個概念:) – Robert 2014-11-24 13:21:58

+0

隨時隨地老兄: ) – 2014-11-24 13:22:44

-3

=創建對同一對象的新引用。 clone()創建一個新的物理對象,其屬性與前面的一樣

+3

幾年前回答問題時,如果您沒有添加任何內容,請不要回答。你所說的一切都已經包含在以前的答案中。 – klutt 2017-05-26 23:17:08

+2

_ @ AnmolParikh_只是爲了通知你。你的答案目前在Meta Stack Overflow中討論過:https://meta.stackoverflow.com/questions/349781/how-do-i-vote-late-answers-when-there-are-much-better-answers – 2017-05-26 23:29:48

相關問題