java的数组是一个引用数据类型,必须深拷贝才能真正的复制
深拷贝是指复制数据内容,浅拷贝是指复制引用地址
以二维数组为例,这里假设长度不确定,则需要求出所有的一维数组,再复制到二维数组中,可以使用Arrays.deepToString(Object)方法快速打印二维数组。
public static void main(String[] args) {
int[][] a = {{1,2,3},{4,5},{6,7,8,9}};
int[][] b = new int[a.length][]; // a 拷贝至 b
for (int i = 0; i < a.length; i++) {
int[] ab = new int[a[i].length];
for (int j = 0; j < a[i].length; j++) {
ab[j] = a[i][j];
}
b[i] = ab;
}
System.out.println(Arrays.deepToString(b));
}
程序执行结果:
- [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
此外,针对一维数组,java.util.Arrays提供拷贝方法copyOf,上述代码可以改为:
public static void main(String[] args) {
int[][] a = {{1,2,3},{4,5},{6,7,8,9}};
int[][] b = new int[a.length][]; // a 拷贝至 b
for (int i = 0; i < a.length; i++) {
b[i] = Arrays.copyOf(a[i],a[i].length); // 数组,终止位置
}
System.out.println(Arrays.deepToString(b));
}