Arrays.copyOf()
底层都是使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)方法完成数组元素拷贝任务的
方法说明:
- 如果newLength < original.length,那么会将原数组中前newLength个元素拷贝到新数组中
- 如果newLength > original.length,那么新数组中没有被赋值的元素将会被设置为默认值(0、false或null)
- 基本类型
- int[] copyOf(int[] original, int newLength)
- long[] copyOf(long[] original, int newLength)
- float[] copyOf(float[] original, int newLength)
- double[] copyOf(double[] original, int newLength)
- 对象类型
T[] copyOf(T[] original, int newLength)
功能:拷贝original对象数组,新数组的大小是newLength
System.arraycopy()
方法签名
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
说明:该方法是native方法
Arrays.copyOf() Vs System.arraycopy()
两者都是用来拷贝数组,Arrays.copyOf在底层调用的是System.arrayCopy()方法
如果拷贝的是基本类型元素,那么两者都是进行深拷贝(拷贝数值)
如果拷贝的是引用类型元素,那么两个都是进行浅拷贝(dest数组中的每个元素保存的是源数组元素所指向的对象的引用)
区别:
使用Arrays.copyOf拷贝元素,得到的是一个新数组对象
使用System.arrayCopy()拷贝元素,不会创建新数组,在底层是对内存块的直接复制