57.数组的拷贝

可以将一个数组变量拷贝给另一个数组变量,这个时候,这两个数组变量均指向同一个数组。通过任何一个数组变量进行操作,均会对另一个数组变量中的数组产生影响。

 

请看下面这个例子:

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数组本身并不发生变化。

你可能感兴趣的:(数组)