System.arrayCopy()研究

来源:互联网 发布:access mysql 交互 编辑:程序博客网 时间:2024/05/29 02:34
public static native void arrayCopy(Object src,intsrcPos,Object dest,int destPos,int length);
以下内容翻译自Java源码中的注释,因为是native的,所以没有方法体。
   将一个数组复制到另一个数组,从源数组的srcPos位置开始复制长度为length的子数组到目标数组dest的destPos开始的位置,在源数组中的结束位置是srcPos+length-1,在目标数组dest中的结束位置为destPos+length-1。
   如果源数组和目标数组referto同一个数组对象,那么,就像将源数组中的srcPos到srcPos+length-1段先复制到一个临时数组,然后再将临时数组复制到目标数组(同一个)的指定位置。
   如果目标数组dest is null,则抛出NullPointerException;
   如果源数组src isnull,则抛出NullPointerException,而且,目标数组dest并不会发生改变。
   如果发生以下情况,就会抛出一个ArrayStoreException:
    1.源数组Src并不是一个数组。2.目标数组dest并不是一个数组。3.源数组和目标数组是不同类型的基础类型,例如Src是int,而dest是boolean。4.源数组是基础类型,而目标数组dest是引用类型。5.源数组是引用类型,而目标数组是基础类型。
    如果发生以下情况,则抛出IndexOutOfBoundsException:
    1.srcPos为负值。2.destPos为负值。3.length为负值。4.srcPos+length> src.length 5.destPos+length > dest.length
   如果源数组中的某个成员 通过强制转换(assignment conversion)无法被转换(Convert)成为目标数组的对应类型(type),就会抛出一个ArrayStoreException。假设src[k]不能被显示转换为目标数组的类型,当异常抛出时,源数组中src[srcPos]至src[k-1]的内容已经被复制到了目标数组的对应位置,而之后的源数组内容并不会被复制。只有当源数组和目标数组都是引用类型时才有可能发生这种情况。

0 0
原创粉丝点击