编程中是否有明确的参考资料?
我看到很多人将深度复制和克隆称为同一件事。这是真的?
语言是否依赖?
小点,但它困扰我......
答案 0 :(得分:26)
这些概念没有正式的定义,至少没有跨越所有语言的概念。
虽然通常是常见的:
答案 1 :(得分:10)
是的,有区别。就语言依赖性而言,某些语言可以执行所有Shallow,Deep,Lazy复制。有些只做浅版。所以是的,它有时依赖于语言。
现在,以一个数组为例:
int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;
“numbersCopy”数组现在包含相同的值,但更重要的是,数组对象本身指向与“数字”数组相同的对象引用。
所以,如果我做的事情如下:
numbersCopy[2] = 0;
以下陈述的输出结果是什么?
System.out.println(numbers[2]);
System.out.println(numbersCopy[2]);
考虑到两个数组都指向相同的引用:
0
0
但是如果我们想用自己的引用制作第一个数组的独特副本呢?那么在这种情况下我们想要克隆数组。这样做,每个数组现在都有自己的对象引用。让我们看看它将如何运作。
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]);
你猜对了:
4
0
答案 2 :(得分:3)
最简洁:
没有达成共识,因为开发人员轻易地互相交换;然而,人们可以根据以下内容游说上述内容:
答案 3 :(得分:2)
我想说复制和克隆是类似的术语。你唯一应该注意的是你得到浅拷贝和深拷贝。浅拷贝仅在根级别创建对象的副本,而深拷贝将生成对象及其所有子对象的副本。
答案 4 :(得分:1)
在C ++中 - 土地“克隆”通常是深层复制多态类对象的惯用语。
在Java / C#中,我怀疑这些术语可以互换使用。