Arrays.copyof(···)与System.arraycopy(···)数组元素复制区别

来源:互联网 发布:php邀请码生成算法 编辑:程序博客网 时间:2024/05/17 00:49

他们的区别就是 System.arraycopy不关心你是什么数据类型,只是完成数据元素复制。Arrays.copyof方法是根据不同类型调用System.arraycopy方法完成复制内容。
System.arraycopy方法是一个本地方法的字节复制函数;完成将src数组指向的内存一部分复制到dest数组指向的内存。
src 是原数组,srcPos指定开始复制的下标
dest是复制的目的数组,destPos表示目的数组开始接受复制内容的下标
length表示这次复制的数组元素个数

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

再来看看Arrays.copyOf();该方法对于不同的数据类型都有相应的方法重载。
这个字节数组复制时先定义了一个新字节数组,newLength长度。
然后调用System.arraycopy本地方法完成复制功能。
其他基本数据类型的复制都是一样的模式。

 public static byte[] copyOf(byte[] original, int newLength) {        byte[] copy = new byte[newLength];        System.arraycopy(original, 0, copy, 0,                         Math.min(original.length, newLength));        return copy;    }

关于这个泛型的复制内容,关键是根据复制的original寻找到数据类型,构建一个newLength长的数组。

 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {        @SuppressWarnings("unchecked")        T[] copy = ((Object)newType == (Object)Object[].class)            ? (T[]) new Object[newLength]            : (T[]) Array.newInstance(newType.getComponentType(), newLength);        System.arraycopy(original, 0, copy, 0,                         Math.min(original.length, newLength));        return copy;    }
0 0
原创粉丝点击