System.arraycopy 与 Arrays.copyOf 分析
2017-05-31 11:44
369 查看
System.arraycopy
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。
Arrays.copyOf
调用copy方法时,内部通过反射创建数据,然后使用 System.arraycopy 方法,返回数组。
总结
针对一维数据并且数据项不为对象时,两个方法都是深拷贝,其他情况都是浅拷贝。
System.arraycopy 方法传入的拷贝数据长度大于源数据时,超过的部分为null,小与源数据时会报错。
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。
Arrays.copyOf
@SuppressWarnings("unchecked") public static <T> T[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); } 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; }
调用copy方法时,内部通过反射创建数据,然后使用 System.arraycopy 方法,返回数组。
总结
针对一维数据并且数据项不为对象时,两个方法都是深拷贝,其他情况都是浅拷贝。
System.arraycopy 方法传入的拷贝数据长度大于源数据时,超过的部分为null,小与源数据时会报错。
相关文章推荐
- Arrays.copyOf() 和 System.arrayCopy()分析
- Java编程:Arrays.copyOf()与System.arraycopy()的分析
- Arrays.copyOf()与System.arraycopy()的源码分析
- System.arraycopy(src, srcPos, dest, destPos, length) 与 Arrays.copyOf(original, newLength)区别
- [java]Arrays.copyOf() VS System.arrayCopy()
- Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()
- java中System.copyArray与Arrays.copyof区别
- Arrays.copyof(···)与System.arraycopy(···)数组元素复制区别
- System.arraycopy() vs. Arrays.copyOf() in Java
- Arrays.copyOf(...)和System.arraycopy(...)
- Arrays.copyof()和System.arraycopy()方法总结
- Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()
- java数组的四种拷贝方法的性能分析:for、clone、System.arraycopy、Arrays.copyof
- System.arraycopy、Arrays.copyOf和ArrayList的toArray介绍
- Arrays.copyof(···)与System.arraycopy(···)区别
- java数组的拷贝四种方法:for、clone、System.arraycopy、arrays.copyof
- System.arraycopy() 与 Arrays.copyOf()两个方法的区别
- Arrays.copyOf和System.arraycopy之间的区别
- JAVA System.arraycopy 和Arrays.copyof 效率比较
- Arrays.copyof(···)与System.arraycopy(···)区别