一些Java的基本知识2
?在Java中,允许将一个数组变量拷贝给另一个数组变量。这是,这两个变量将引用同一个数组:
?????int[] luckyNumbers = smallPrimes;
?????luckyNumbers[5] = 12;//now smallPrimes[5] is also 12
????如果希望将一个数组的所有值拷贝到另一个数组中去,就要使用System类的arraycopy方法。调用这个方法的语法格式为:
?????System.arraycopy(from,fromindex,to,toindex,count);
????数组必须有足够的空间来存放拷贝的元素。
????例如,下面这段代码所得到的结果是它创建了两个数组,然后将第一个数组的后4个元素拷贝到第2个数组中。拷贝从源数组中的第2个位置开始,一共拷贝4个元素,目标数组的起始位置为3。
?????int[] smallPrimes = {2,3,5,7,11,13};
?????int[] luckyNumbers = {1001,1002,1003,1004,1005,1006,1007};
?????System.arraycopy(smallPrimes,2,luckyNumbers,3,4);
?????for(int i = 0;i < luckyNumbers.length;i++)
?????{
??????????System.out.println(i + ":" + luckyNumbers[i]);
?????}
????输出结果为:
?????0:1001
?????1:1002
?????2:1003
?????3:5
?????4:7
?????5:11
?????6:13
需要将数组的所有值拷贝时,就得使用Arrays类的copyOf方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumber,luckyNumber.length)
也可用来增加数组长度,比如:
luckyNumbers = Arrays.copyOf(luckyNumber,2*luckyNumber.length)
?
补充:
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:
public static void arraycopy(Object src,
???????????????????????????? int srcPos,
???????????????????????????? Object dest,
???????????????????????????? int destPos,
???????????????????????????? int length)
src:源数组;?srcPos:源数组要复制的起始位置;dest:目的数组;?destPos:目的数组放置的起始位置;?length:复制的长度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组.有趣的是这个函数可以实现自己到自己复制,比如:
int[] fun ={0,1,2,3,4,5,6}; System.arraycopy(fun,0,fun,3,3);则结果为:{0,1,2,0,1,2,6};
实现过程是这样的,先生成一个长度为length的临时数组,将fun数组中srcPos 到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时数组,0,fun,3,3).