小智 10
是,有一点不同.就语言依赖性而言,某些语言可以执行所有Shallow,Deep,Lazy复制.有些只做浅版.所以是的,它有时依赖于语言.
现在,以一个数组为例:
int [] numbers = { 2, 3, 4, 5};
int [] numbersCopy = numbers;
Run Code Online (Sandbox Code Playgroud)
"numbersCopy"数组现在包含相同的值,但更重要的是,数组对象本身指向与"数字"数组相同的对象引用.
所以,如果我做的事情如下:
numbersCopy[2] = 0;
Run Code Online (Sandbox Code Playgroud)
以下陈述的输出结果是什么?
System.out.println(numbers[2]);
System.out.println(numbersCopy[2]);
Run Code Online (Sandbox Code Playgroud)
考虑到两个数组都指向相同的引用,我们会得到:
0
0
但是,如果我们想要使用自己的引用制作第一个数组的独特副本呢?那么在这种情况下我们想要克隆数组.这样做,每个数组现在都有自己的对象引用.让我们看看它将如何运作.
int [] numbers = { 2, 3, 4, 5};
int [] numbersClone = (int[])numbers.clone();
Run Code Online (Sandbox Code Playgroud)
"numbersClone"数组现在包含相同的值,但在这种情况下,数组对象本身指向的参考不同于"数字"数组.
所以,如果我做的事情如下:
numbersClone[2] = 0;
Run Code Online (Sandbox Code Playgroud)
现在以下陈述的输出是什么?
System.out.println(numbers[2]);
System.out.println(numbersClone[2]);
Run Code Online (Sandbox Code Playgroud)
你猜到了:
4
0
最简洁:
由于开发人员草率地交换它们,因此没有达成共识;但是,可以基于以下内容游说上述内容: