复制数组
Java标准类库提供有static方法System.arraycopy(),用它复制数组比用for循环复制要快得多,System.arraycopy()针对所有类型做了重载。下面的例子就是用来处理int数组的:
package sc.sphenic.jdk.array;
import java.util.Arrays;
public class CopyingArrays {
public static void main(String[] args) {
int[] i = new int[7];
int[] j = new int[10];
Arrays.fill(i, 47);
Arrays.fill(i, 99);
// i = [99, 99, 99, 99, 99, 99, 99]
System.out.println("i = " + Arrays.toString(i));
// i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
System.out.println("i = " + Arrays.toString(j));
System.arraycopy(i, 0, j, 0, i.length);
// j = [99, 99, 99, 99, 99, 99, 99, 0, 0, 0]
System.out.println("j = " + Arrays.toString(j));
int[] k = new int[5];
Arrays.fill(k, 103);
System.arraycopy(i, 0, k, 0, k.length);
// k = [99, 99, 99, 99, 99]
System.out.println("k = " + Arrays.toString(k));
Arrays.fill(k, 103);
System.arraycopy(k, 0, i, 0, k.length);
// i = [103, 103, 103, 103, 103, 99, 99]
System.out.println("i = " + Arrays.toString(i));
// Object
Integer[] u = new Integer[10];
Integer[] v = new Integer[5];
Arrays.fill(u, new Integer(47));
Arrays.fill(v, new Integer(99));
// u = [47, 47, 47, 47, 47, 47, 47, 47, 47, 47]
System.out.println("u = " + Arrays.asList(u));
// v = [99, 99, 99, 99, 99]
System.out.println("v = " + Arrays.asList(v));
System.arraycopy(v, 0, u, u.length / 2, v.length);
// u = [47, 47, 47, 47, 47, 99, 99, 99, 99, 99]
System.out.println("u = " + Arrays.asList(u));
}
}
arraycopy()需要的参数有:源数组,表示从源数组中的什么位置开始复制的偏移量,表示从目标数组的什么位置开始复制的偏移量,以及需要复制的元素个数。当然对数组的任何越界操作都会导致异常。
这个例子说明基本类型数组与对象数组都可以复制。然而,如果复制对象数组,那么只是复制了对象的引用——而不是对象本身的拷贝。这被称为浅复制(shallow copy)。——《java编程思想》对象的集合