1 package b;
2 /*
3 * 使用java.lang.System类的静态方法,使用for循环一个一个拷贝会很慢,由于数组
4 * 在内存里往往都是连续的区域,因此最有效率的往往是直接拷贝内存。
5 * public static void arraycopy(全小写)(object src,int srcPos,object dest,int destPos,int length)
6 * 如果超过目标数组的边界,则会抛出数组越界异常。
7 */
8 public class ArrayCopy {
9 //没加上String args[]时运行的话还是前一个运行过的程序的结果。
10 public static void main(String args[]) {
11 String src[] = {"Microsoft","IBM","Sun","Oracle"};
12 String dest[]= new String[6];
13 System.arraycopy(src,0,dest,0,src.length);
14 //拷贝是并不是真的真考,而是dest数组在堆里也指向那几个公司,那几个公司在堆内存里还是只有一份。
15 for(int i=0; i<dest.length; i++) {
16 System.out.println(dest[i]);//会打印null值
17
18 }
19 System.out.println("----------------");
20 int a[][] = {{1,2},{1,2,3},{3,4}};//里面还是用大括号不是小括号
21 int b[][] = new int[3][];//此时第一维里是null,第二维里才是0
22 System.arraycopy(a,0,b,0,a.length);
23 /*
24 * 原数组的内容在堆内存里还是只有一份不是两份,由于指向的是同一块内存,
25 * 因此对dest的操作相当于对src的操作。
26 */
27 b[2][1] = 100;
28 for(int i=0; i<a.length; i++) {
29 for(int j=0; j<a[i].length; j++) {
30 System.out.println(a[i][j]);
31 }
32 }
33 System.out.println("---OK---");
34
35 }
36 }