1.for循环拷贝数组(深拷贝)
int[] array=new int[] {1,2,3,4};
int[] array1=new int[array.length];
for(int i=0;i<array.length;i++) {
array1[i]=array[i];
}
int[][] array2=new int[][] {{1,3,2},{1,4,5},{4,2,5}};
int[][] array3=new int[array2.length][array2[0].length];
for(int i1=0;i1<array2.length;i1++) {
for(int j=0;j<array2[i1].length;j++) {
array3[i1][j]=array2[i1][j];
}
}
array3[0][0] = 11; //测试(如果修改array3的值,会不会改array2的值)
System.out.println(Arrays.deepToString(array2));
System.out.println(Arrays.deepToString(array3));
输出结果:
[[1, 3, 2], [1, 4, 5], [4, 2, 5]]
[[11, 3, 2], [1, 4, 5], [4, 2, 5]]
2.Arrays.copyOf(原数组,原数组的长度)方法拷贝 (深拷贝)
int[] array=new int[] {1,2,34,5,2};
int[] array1=Arrays.copyOf(array, array.length);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array1));
int[][] array2=new int[][] {{11,24,41},{1,23,4},{22,34,55}};
int[][] array3=Arrays.copyOf(array2, array2.length);
for(int i=0;i<array2.length;i++) {
array3[i]=Arrays.copyOf(array2[i], array2[i].length);
}
array3[0][0]=1; //测试
System.out.println(Arrays.deepToString(array2));
System.out.println(Arrays.deepToString(array3));
输出结果:
[1, 2, 34, 5, 2]
[1, 2, 34, 5, 2]
[[11, 24, 41], [1, 23, 4], [22, 34, 55]]
[[1, 24, 41], [1, 23, 4], [22, 34, 55]]
3.System.arraycopy(array[],起始位置, array1[], 起始位置, array1[].length)方法拷贝(深拷贝)
int[] array=new int[] {1,23,45,2};
int[] array1=new int[array.length];
System.arraycopy(array, 0, array1, 0, array.length);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array1));
int[][] array2=new int[][] {{11,24,41},{1,23,4},{22,34,55}};
int[][] array3=new int[array2.length][array2[0].length];
for(int i=0;i<array2.length;i++) {
System.arraycopy(array2[i], 0, array3[i], 0, array2[i].length);
}
array3[0][0]=1
System.out.println(Arrays.deepToString(array2));
System.out.println(Arrays.deepToString(array3));
结果:
[1, 23, 45, 2]
[1, 23, 45, 2]
[[11, 24, 41], [1, 23, 4], [22, 34, 55]]
[[1, 24, 41], [1, 23, 4], [22, 34, 55]]
4. 用.clone()方法拷贝(深拷贝)
int[] array=new int[] {1,23,45,2};
int[] array1=array.clone();
array1[0]=22;
System.out.println(Arrays.toString(array));
int[][] array2=new int[][] {{11,24,41},{1,23,4},{22,34,55}};
int[][] array3=new int[array2.length][array2[0].length];
for(int i=0;i<array2.length;i++) {
array3[i]=array2[i].clone();
}
array3[0][0]=88;
System.out.println(Arrays.deepToString(array2));
System.out.println(Arrays.deepToString(array3));
结果:
[1, 23, 45, 2]
[[11, 24, 41], [1, 23, 4], [22, 34, 55]]
[[88, 24, 41], [1, 23, 4], [22, 34, 55]]
**以上这些方法是java中的一些深度拷贝方法,另外Arrays中提供了一些关于数组的方法:Arrays.toString(array)用于一维数组 , Arrays.deepToString(array2)用于二维数组的打印。 **