Java使用System.arraycopy复制数组

来源:互联网 发布:数据库怎么存图片 编辑:程序博客网 时间:2024/06/05 18:15

我们在项目中经常会复制一个数组元素到另一个数组里面,java复制数组的方法有很多,在这里介绍下JDK自带的System.arraycopy方法,这个方法使用想当简单快捷。

    /**     * Copies an array from the specified source array, beginning at the     * specified position, to the specified position of the destination array.     * A subsequence of array components are copied from the source     * array referenced by <code>src</code> to the destination array     * referenced by <code>dest</code>. The number of components copied is     * equal to the <code>length</code> argument. The components at     * positions <code>srcPos</code> through     * <code>srcPos+length-1</code> in the source array are copied into     * positions <code>destPos</code> through     * <code>destPos+length-1</code>, respectively, of the destination     * array.     * <p>     * If the <code>src</code> and <code>dest</code> arguments refer to the     * same array object, then the copying is performed as if the     * components at positions <code>srcPos</code> through     * <code>srcPos+length-1</code> were first copied to a temporary     * array with <code>length</code> components and then the contents of     * the temporary array were copied into positions     * <code>destPos</code> through <code>destPos+length-1</code> of the     * destination array.     * <p>     * If <code>dest</code> is <code>null</code>, then a     * <code>NullPointerException</code> is thrown.     * <p>     * If <code>src</code> is <code>null</code>, then a     * <code>NullPointerException</code> is thrown and the destination     * array is not modified.     * <p>     * Otherwise, if any of the following is true, an     * <code>ArrayStoreException</code> is thrown and the destination is     * not modified:     * <ul>     * <li>The <code>src</code> argument refers to an object that is not an     *     array.     * <li>The <code>dest</code> argument refers to an object that is not an     *     array.     * <li>The <code>src</code> argument and <code>dest</code> argument refer     *     to arrays whose component types are different primitive types.     * <li>The <code>src</code> argument refers to an array with a primitive     *    component type and the <code>dest</code> argument refers to an array     *     with a reference component type.     * <li>The <code>src</code> argument refers to an array with a reference     *    component type and the <code>dest</code> argument refers to an array     *     with a primitive component type.     * </ul>     * <p>     * Otherwise, if any of the following is true, an     * <code>IndexOutOfBoundsException</code> is     * thrown and the destination is not modified:     * <ul>     * <li>The <code>srcPos</code> argument is negative.     * <li>The <code>destPos</code> argument is negative.     * <li>The <code>length</code> argument is negative.     * <li><code>srcPos+length</code> is greater than     *     <code>src.length</code>, the length of the source array.     * <li><code>destPos+length</code> is greater than     *     <code>dest.length</code>, the length of the destination array.     * </ul>     * <p>     * Otherwise, if any actual component of the source array from     * position <code>srcPos</code> through     * <code>srcPos+length-1</code> cannot be converted to the component     * type of the destination array by assignment conversion, an     * <code>ArrayStoreException</code> is thrown. In this case, let     * <b><i>k</i></b> be the smallest nonnegative integer less than     * length such that <code>src[srcPos+</code><i>k</i><code>]</code>     * cannot be converted to the component type of the destination     * array; when the exception is thrown, source array components from     * positions <code>srcPos</code> through     * <code>srcPos+</code><i>k</i><code>-1</code>     * will already have been copied to destination array positions     * <code>destPos</code> through     * <code>destPos+</code><i>k</I><code>-1</code> and no other     * positions of the destination array will have been modified.     * (Because of the restrictions already itemized, this     * paragraph effectively applies only to the situation where both     * arrays have component types that are reference types.)     *     * @param      src      the source array.     * @param      srcPos   starting position in the source array.     * @param      dest     the destination array.     * @param      destPos  starting position in the destination data.     * @param      length   the number of array elements to be copied.     * @exception  IndexOutOfBoundsException  if copying would cause     *               access of data outside array bounds.     * @exception  ArrayStoreException  if an element in the <code>src</code>     *               array could not be stored into the <code>dest</code> array     *               because of a type mismatch.     * @exception  NullPointerException if either <code>src</code> or     *               <code>dest</code> is <code>null</code>.     */    public static native void arraycopy(Object src,  int  srcPos,                                        Object dest, int destPos,                                        int length);

这是System.class中对arraycopy方法的定义,可以看出来这个方法是native 方法,所以在这里看不到具体的实现,arraycopy接收5个参数,src是源数组(被复制的数组),srcPos是源数组复制的起始位置,dest是目标数组,destPos是目标数组存放的起始位置,length是复制的长度。因为是静态方法,所以直接通过System.arraycopy()就可以调用了。。。有兴趣的小伙伴可以去试试看。。

0 0
原创粉丝点击