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. 克隆和复制git repo有什么区别?
- 2. 复制.hg文件夹和使用克隆有什么区别?
- 3. git克隆vs复制粘贴,有什么区别?
- 4. 深层和浅层克隆有什么区别?
- 5. 添加和克隆远程存储库有什么区别?
- 6. “复制”和“保留”有什么区别?
- 7. Mercurial中克隆和复制之间的区别
- 8. 复制和克隆div
- 9. 有什么区别复制命令 - windows
- 10. 克隆/复制SimpleScriptContext
- 11. 使用pip命令和conda安装tensorflow或指导克隆有什么区别?
- 12. 使用.clone()方法和=符号克隆对象有什么区别?
- 13. 强制和超载有什么区别?
- 14. 有什么区别`和$(Bash中有什么区别?
- 15. 在Mongo中分片和复制有什么区别?
- 16. MongoDB中的“副本对”和“主 - 主”复制有什么区别?
- 17. Ansible模板模块和复制模块有什么区别?
- 18. ==和===有什么区别?
- 19. ==和===有什么区别?
- 20. 有什么区别? :和||
- 21. ==和===有什么区别?
- 22. '=='和'==='有什么区别?
- 23. `&`和`ref`有什么区别?
- 24. 有什么区别:。!和:r!?
- 25. | 0和~~有什么区别?
- 26. Appender和〜有什么区别?
- 27. jsPlumb-没有复制拖动克隆
- 28. 复制/克隆Javascript对象
- 29. 什么是'线程限制'克隆?
- 30. 为什么Git克隆复制不同的存储库?
我不相信他们的相对含义有任何明确的共识。 – 2010-02-04 14:38:08