30
A
回答
26
有沒有關於這些概念的正式定義,至少不是一個跨越所有語言。
什麼是平時常見的,但:
- 克隆 - 創造新的東西基於東西存在。
- 複製 - 從存在的東西複製到其他東西(也已存在)。
1
在C++ - 地「克隆」通常是成語深度複製多態類對象。
在Java/C#中,我懷疑這些術語可以更多地交換使用。
2
我會說複製和克隆是類似的術語。你應該知道的唯一的事情是你得到淺拷貝和深拷貝。淺拷貝僅在根級創建對象的副本,其中深拷貝將生成對象及其所有子對象的副本。
9
是的,有區別。至於語言依賴性,一些語言可以完成所有淺,深,懶惰的複製。有些只做淺的副本。所以是的,有時候這是語言依賴的。
現在,採取例如陣列:
int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;
的「numbersCopy」陣列現在包含相同的值,但更重要的是該陣列對象本身指向同一對象引用爲「數字」的數組。
所以,如果我做這樣的事情:
numbersCopy[2] = 0;
會是怎樣下列語句的輸出?
System.out.println(numbers[2]);
System.out.println(numbersCopy[2]);
考慮兩個陣列指向同一個參考,我們將得到:
但是,如果我們想使第一陣列的不同副本都有自己的什麼參考?那麼在那種情況下,我們想克隆這個數組。爲此,每個數組現在都有自己的對象引用。讓我們看看這將如何工作。
int [] numbers = { 2, 3, 4, 5};
int [] numbersClone = (int[])numbers.clone();
的「numbersClone」陣列現在包含相同的值,但在這種情況下,陣列對象本身指向比「數字」陣列的不同的參考。
所以,如果我做這樣的事情:
numbersClone[2] = 0;
什麼是輸出現在下面的語句?
System.out.println(numbers[2]);
System.out.println(numbersClone[2]);
你猜對了:
3
最簡潔:
- 副本:複製到現有實例(淺或深)
- 克隆:複製到新的實例(總深)
爲開發商拖泥帶水沒有達成共識交換他們;然而,人們可以基於以下方式遊說以上內容:
- 詞源(生物學)意味着「淺層克隆」的概念是荒謬的,因爲不是基因相同;克隆意味着完整性以傳播實體。
- 複製歷史意味着複製到現有介質上(複製書本或繪畫等)。例如,複印件將圖像複製到現有紙張上;如果有人能夠克隆一張紙,結果會是一張新紙。
- 可以「複製」一個對象引用,但永遠不會「克隆」一個對象引用。
相關問題
- 1. 複製.hg文件夾和使用克隆有什麼區別?
- 2. 克隆和複製git repo有什麼區別?
- 3. git克隆vs複製粘貼,有什麼區別?
- 4. 克隆和擴展骨幹事件對象有什麼區別?
- 5. 深層和淺層克隆有什麼區別?
- 6. 添加和克隆遠程存儲庫有什麼區別?
- 7. 「複製」和「保留」有什麼區別?
- 8. Mercurial中克隆和複製之間的區別
- 9. 什麼是更快的複製或克隆一個FreeBSD分區?
- 10. 複製和克隆div
- 11. 有什麼區別複製命令 - windows
- 12. 使用.clone()方法和=符號克隆對象有什麼區別?
- 13. 使用pip命令和conda安裝tensorflow或指導克隆有什麼區別?
- 14. 克隆/複製SimpleScriptContext
- 15. 強制和超載有什麼區別?
- 16. 有什麼區別`和$(Bash中有什麼區別?
- 17. 有什麼區別「複製」和「另存爲」,在MS Word文檔?
- 18. MongoDB中的「副本對」和「主 - 主」複製有什麼區別?
- 19. Ansible模板模塊和複製模塊有什麼區別?
- 20. 在Mongo中分片和複製有什麼區別?
- 21. 有什麼區別? :和||
- 22. &&和||有什麼區別?
- 23. 「/」和「/ *」有什麼區別?
- 24. 有什麼區別:。!和:r!?
- 25. ==和===有什麼區別?
- 26. Appender和〜有什麼區別?
- 27. $ @和$ *有什麼區別?
- 28. is和=有什麼區別?
- 29. #.00和#。##有什麼區別?
- 30. `==`和`is`有什麼區別?
我不相信他們的相對含義有任何明確的共識。 – 2010-02-04 14:38:08