System.arraycopy

Posted 请叫我大表哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.arraycopy相关的知识,希望对你有一定的参考价值。

public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length);

 参数说明:

    src:源数组; 
    srcPos:源数组要复制的起始位置; 
    dest:目的数组; 
    destPos:目的数组放置的起始位置; 
    length:复制的长度
原理:
    实现过程是这样的,先生成一个长度为length的临时数组,将src数组中srcPos 到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时组,srcPos,dest,destPos,length).
注意:
    1、src 和 dest都必须是同类型或者可以进行转换类型的数组
    2、srcPos、srcPos+length-1都必须小于src的size,destPos、destPos+length-1也必须小于dest的size。
    3、临时数组必须能一一对应到dest数组中。
例:    
 int[] fun ={0,1,2,3,4,5,6};
 int[] fun1 = {7,8,9,10};
 /**
  * 两个不同数组间的拷贝
  * 1、拷贝fun中索引3到5(3+3-1)数据到临时数组中,生成临时数组int[] tmp = {3,4,5}。
  * 2、替换fun1中索引从1到3(1+3-1)的元素。
  */
 System.arraycopy(fun, 3, fun1, 1, 3);//结果为fun不变,fun1变为{7,3,4,5}
 
 /**
  * 同一个数组自己到自己的拷贝
  * 1、拷贝fun中索引3到6(3+4-1)数据到临时数组中,生成临时数组int[] tmp = {3,4,5,6}
  * 2、替换fun中索引2到5(2+4-1)的元素。
  */
 System.arraycopy(fun, 3, fun, 2, 4);//结果fun为{0,1,3,4,5,6,6}

 

以上是关于System.arraycopy的主要内容,如果未能解决你的问题,请参考以下文章

System.arraycopy 不抛出 ArrayIndexOutOfBoundsException

System.arraycopy 和Arrays.copyOf

Java 学习笔记 System.arraycopy 复制数组

有啥理由更喜欢 System.arraycopy() 而不是 clone()?

Java System.arraycopy

Java 数组中System.arraycopy()方法的使用详解