可以将一个数组变量拷贝给另一个数组变量,这个时候,这两个数组变量均指向同一个数组。通过任何一个数组变量进行操作,均会对另一个数组变量中的数组产生影响。
请看下面这个例子:
public class ArrayCopy1 {
public static void main(String[] args) {
int[] a = { 12, 3, 19, 2, 10, 13, 9 };
int[] b;
b = a;
System.out.println("Before Modifying:");
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "]=" + a[i] + " ");
}
System.out.println("");
b[3] = 31;
System.out.println("After Modifying:");
for (int i = 0; i < a.length; i++) {
System.out.print("a[" + i + "]=" + a[i] + " ");
}
}
}
这个程序首先初始化了一个int类型的数组a,然后,将这个数组变量拷贝给另一个int类型的数组b,这个时候,数组变量a和b均指向同一个数组,如果通过数组变量b来对数组的内容进行修改,也会反映到数组变量a中。
执行这个程序后的结果是:
Before Modifying:
a[0]=12 a[1]=3 a[2]=19 a[3]=2 a[4]=10 a[5]=13 a[6]=9
After Modifying:
a[0]=12 a[1]=3 a[2]=19 a[3]=31 a[4]=10 a[5]=13 a[6]=9
这是因为数组本身是引用类型,就像前面提到的,变量赋值是完成了值传递,这个值是数组对象的引用,根据引用,修改的数组对象是同一个。
如果只是需要将数组的值拷贝到另一个数组,可以使用System的一个静态方法arraycopy,它有5个参数:from、fromIndex、to、toIndex、count,它的意思是将数组from中的索引为fromIndex开始的元素,拷贝到数组to中索引为toIndex的位置,拷贝的元素个数为count个。
看一个使用System类的arraycopy()方法来拷贝数组值的例子:
public class ArrayCopy2 {
public static void main(String[] args) {
int[] a = new int[10];
int[] b = new int[10];
System.out.println("Before Copying:");
for (int i = 0; i < 10; i++) {
a[i] = i + 1;
b[i] = (i + 1) * 100;
System.out.print("b[" + i + "]=" + b[i] + " ");
}
System.out.println("");
System.arraycopy(a, 2, b, 5, 5);
System.out.println("After Copying:");
for (int i = 0; i < b.length; i++) {
System.out.print("b[" + i + "]=" + b[i] + " ");
}
}
}
执行这个程序后在控制台上打印的结果如下:
Before Copying:
b[0]=100 b[1]=200 b[2]=300 b[3]=400 b[4]=500 b[5]=600 b[6]=700 b[7]=800 b[8]=900 b[9]=1000
After Copying:
b[0]=100 b[1]=200 b[2]=300 b[3]=400 b[4]=500 b[5]=3 b[6]=4 b[7]=5 b[8]=6 b[9]=7
通过这种方式拷贝数组,只是将a数组中指定元素的值拷贝给了b数组中的指定元素,a数组本身并不发生变化。