System.arraycopy()方法:见名知意,就是数组的复制方法。
(以下有些部分是网上搜的大神们的内容,之所以重新写一遍只是为了增加自己的印象,绝无抄袭之意!!!!!!!!!!)
源码声明如下:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数解释:
Object src : 原数组
int srcPos : 从元数据的起始位置开始
Object dest : 目标数组
int destPos : 目标数组的开始起始位置
int length : 要copy的数组的长度
例子:
我们有一个数组数据 byte[] srcBytes = new byte[]{2,4,0,0,0,0,0,10,15,50}; // 源数组
byte[] destBytes = new byte[5]; // 目标数组
我们使用System.arraycopy进行转换(copy)
System.arrayCopy(srcBytes,0,destBytes ,0,5)
上面这段代码就是 : 创建一个一维空数组,数组的总长度为 12位,然后将srcBytes源数组中 从0位 到 第5位之间的数值 copy 到 destBytes目标数组中,在目标数组的第0位开始放置.
那么这行代码的运行效果应该是 2,4,0,0,0,
总结:从上述大神的解释不难看出,就是在原数组中的某个下标(例子中是0)开始取值,在目标数组的某个位置开始位置(例子中是0),取了多少位(例子中是5)进行一次复制,等同于复制+赋值。
我写了一个小测试:
public class ArrayCopy {
public static void main(String[] args) {
byte[] src=new byte[]{1,2,3,4,5,6,7,8,9,0};
byte[] dest1=new byte[5];
byte[] dest2=new byte[5];
byte[] dest3=new byte[5];
System.arraycopy(src,0,dest1,0,5);
/**System.arraycopy(src,0,dest2,1,5);//下标越界异常 java.lang.ArrayIndexOutOfBoundsException
*(src,0,dest2,1,4)中的1和4是dest目标数组的起始位置和存储量
* 由于目标数组定义长度为5,所以从下标为1时开始存,只能存4个元素,1之前的默认为0因此
*在上一个打印中(src,0,dest2,1,5)中1,5就会报错下标越界
**/
System.arraycopy(src,0,dest2,1,4);
//这一行就是从原数组下标为2的位置开始取值
System.arraycopy(src,2,dest3,1,4);
System.out.println("dest1 =="+Arrays.toString(dest1));
System.out.println("dest2 =="+Arrays.toString(dest2));
System.out.println("dest3 =="+Arrays.toString(dest3));
}
}
打印结果是:
应该可以很清楚地明白这个System.arraycopy()方法。
相关博客: