本文重在温习……不过初学以及进阶高手不可错过
1. public static void arraycopy(全小写)(object src,int srcPos,object dest,int destPos,int length)
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 }