我首先克隆了一维原始数组(它将保存包装器),然后更改克隆数组的第一个值。但原始数组的第一个值没有改变。然后我克隆了一个二维数组并做了同样的事情。(更改了数组[0][0]值)。原始数组[0][0]处的值也被更改了。为什么会发生这种情况。这是浅拷贝和深拷贝的原因吗?
我的一维数组示例
int[] arr=new int[2];
arr[0]=1;
arr[1]=2;
int[]arrnew=arr.clone();
System.out.println(arr[0]);
System.out.println(arrnew[0]);
arr[0]=5;
System.out.println(arr[0]);
System.out.println(arrnew[0]);
我的二维数组示例
int[][] arr=new int[2][2];
arr[0][0]=1;
arr[0][1]=2;
arr[1][0]=3;
arr[1][1]=4;
int[][] arrnew=arr.clone();
System.out.println(arr[1][0]);
System.out.println(arrnew[1][0]);
arr[1][0]=5;
System.out.println(arr[1][0]);
System.out.println(arrnew[1][0]);
最佳答案
Is this due to shallow copy and deep copy?
是的。 clone()
仅执行浅复制。
clone方法复制第一维的内容。在第一个示例中,数组只有一维并且由整数(这是一种值类型)组成,因此所有整数都会被复制。这仍然是一个浅拷贝。如果您使用数组中的引用类型制作相同的示例,您将看到与多维数组相同的行为。
在第二个示例中,您有一个二维数组,它基本上是一个数组的数组,因此“第一个数组”包含引用。当您克隆多维数组时,将复制对数组的引用,而不是这些数组的内容(因为它不是深层复制)。
关于java - 克隆一维数组和二维数组时发生什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696749/