首先需要明确的是Java中数组的复制是引用传递,而不是值传递。
两者有什么不同呢,首先来看一个实例。
public class ArrayDemo {
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5};
int[] array2 = array1;
for (int i = 0; i < array1.length; i++) {
array1[i] += 1;
}
for (int i = 0; i < array2.length; i++) {
System.out.print(array2[i]);
System.out.print(" ");
}
}
}
运行结果:
2 3 4 5 6
看到了吗,array2会随着array1的变化而变化,array2只是对array1的一个引用。
那要进行复制怎么办呢?
有3中方法进行数组的复制
1. for循环进行遍历
public class ArrayDemo {
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5};
int[] array2 = new int[array1.length];
for (int i = 0; i < array2.length; i++) {
array2[i] = array1[i];
}
}
}
2. Arrays类的copyOf方法
int[] array2 = Arrays.copyOf(array1, array1.length);
3. System类的arraycopy方法
int[] array3 = new int[array1.length];
System.arraycopy(array1, 0, array3, 0, array1.length);
具体每个参数的意思,参考Java API文档。
那二维数组的复制会出现什么情况呢?明白了二维数组时数组的数组,其实也很容易想明白。复制的方法同样有3中,下面只给出其中一种的实例:
int[][] matrix2 = new int[row][column];
for (int i = 0; i < row; i++) {
matrix2[i] = Arrays.copyOf(matrix1[i], column);
}
即对利用循环对二维数组的每一行进行拷贝操作,这样才能得到一个真正的拷贝数组。