方法一:直接拷贝数组的地址
int[][] array = {{1,2,3},{4,5,6}};
int[][] array2 = new int[2][3];
array2 = array;
此时是把array的地址给了array2,俩者指向同一块内存,所以,当其中一个数组的某个元素改变时,另一个数组的相对应元素也会发生改变。
方法二:for循环遍历拷贝
int[][] array = {{1,2,3},{4,5,6}};
int[][] array2 = new int[2][3];
for(int i = 0;i < array.length;i++){
for(int j = 0;j < array[i].length;j++){
array2[i][j] = array[i][j];
}
补充foreach循环遍历二维数组
//foreach
public static void show2(int[][] array){
for( int[] brr: array ){
for(int i:brr){
System.out.print(i+" ");
}
System.out.println();
}
}
方法三:Arrays.copyOf与 Arrays.arraycopy
System.arraycopy(Object src, srcindex, Object dest,destindex,length)
Object src:源数组
srcindx:原数组起始下标
Object dest:目的数组
destindex:目的数组开始的下标 length:复制的长度
应该注意的是:这个函数,一维数组复制是可以的,但是二维数组这样调用的时候,如果改变了目的数组的值,源数组的相应的值也会改变。
必须使用for循环进行拷贝,不然拷贝的只是地址,并没有拷贝到值。
for (int i = 0; i < src.length; i++) {
System.arraycopy(a[i], 0, dest[i], 0, dest[0].length);
}
int[][] array = {{1,2,3},{4,5,6}};
int[][] array2 = new int[2][3];
for(int i = 0;i < array.length;i++)
array2[i] = Arrays.copyOf(array[i],array[i].length);
不推荐使用clone()拷贝。
有兴趣可以看看:
Java中clone()方法的理解
end.