在编程中是否有权威参考资料?
我看到很多人把深拷贝和克隆视为同一件事。这是真的吗?
它是否与语言有关?
虽然这只是一个小细节,但它一直在困扰着我...
这些概念没有正式的定义,至少没有一个适用于所有语言的定义。
通常情况下:
是的,有所不同。就语言依赖性而言,一些语言可以执行所有浅层、深层、惰性复制。有些只能进行浅层复制。因此,有时确实取决于语言。
现在,以数组为例:
int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;
“numbersCopy” 数组现在包含相同的值,但更重要的是数组对象本身指向与“numbers”数组相同的对象引用。
因此,如果我要做类似以下的事情:
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” 数组现在包含相同的值,但是在这种情况下,数组对象本身指向的引用与 “numbers” 数组不同。
因此,如果我要做类似以下的操作:
numbersClone[2] = 0;
System.out.println(numbers[2]);
System.out.println(numbersClone[2]);
你猜对了:
4
0
numbersCopy
)既不是副本也不是克隆,而是一个引用。 - cowlinator最简洁的概述:
开发人员通常松散地交替使用它们,因此没有共识;但是您可以基于以下理由提出上述观点:
我认为“复制”和“克隆”是类似的术语。你需要注意的是,你可以获得浅复制和深复制。浅复制仅复制一个对象的根级别,而深复制会产生一个对象及其所有子对象的副本。