4

我想将给定数组的精确副本复制到其他数组,但是即使我更改了新数组中任何值的值,它也不会更改原始数组中的值。我尝试了以下代码,但在第三行之后,数组都发生了变化并获得了相同的值。

int [][]a = new int[][]{{1,2},{3,4},{5,6}};
int[][] b = a;
b[1][0] = 7;

而不是第二行我也试过

int[][] b = (int[][])a.clone();

int [][] b = new int [3][2];
System.arraycopy(a,0,b,0,a.length);

int [][] b = Arrays.copyOf(a,a.length);

这些都没有帮助。请给我一个合适的方法。我已经在 eclipse 剪贴簿中测试了这段代码。

4

2 回答 2

9

您必须复制数组的每一行;你不能复制整个数组。您可能听说过这称为深度复制。

接受你需要一个诚实至善的for循环。

int[][] b = new int[3][];
for (int i = 0; i < 3; i++) {
  b[i] = Arrays.copyOf(a[i], a[i].length);
}
于 2013-07-08T19:14:58.140 回答
-1

根据java文档,System.arraycopy() 应该为您工作,但它不会作为一个整体进行复制,它会“从指定位置复制到指定位置”。

于 2013-07-08T19:17:27.370 回答