我首先克隆了1D原始数组(它将保存包装器)然后更改克隆数组的第一个值。但是原始数组的第一个值没有改变。然后我克隆了一个2D数组并做了同样的事情。(更改了数组[0] [0]值)。其值为originalArray [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]);
我的2D数组示例
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]);
答案 0 :(得分:4)
这是由于浅拷贝和深拷贝吗?
是。 clone()
仅执行浅拷贝。
clone方法复制第一个维度的内容。在第一个示例中,数组只有1维,由整数(值类型)组成,因此复制了所有整数。这仍然是一个浅薄的副本。如果您使用数组中的引用类型创建相同的示例,您将看到与多维数组相同的行为。
在第二个例子中,你有一个二维数组,它基本上是一个数组数组,所以“第一个数组”包含引用。克隆多维数组时,将复制对数组的引用,而不是这些数组的内容(因为它不是深层副本)。
答案 1 :(得分:0)
更改int[][] arrnew=arr.clone(); to int[][] arrnew=(int[][]) arr.clone();
它的行为与1D阵列的情况相同