System.arraycopy和Arrays.copyOf的原理解剖

数组的复制其实在很多业务情况下会用到,不同的业务情况下选择适合的方式来实施复制是每个开发人员要考虑的事情。

那么System.arraycopyArrays.copyOf到底是如何复制的呢?接下来就一起来讨论一下吧。


arraycopy

arraycopy是System提供的native静态方法,方法原型如下;

public static native void arraycopy(Object arg, int arg0, Object arg1, int arg2, int arg3);复制代码

参数arg:源数组对象

arg0:源数组的起始位置

arg1:目标数组对象

arg2:目标数组的起始位置

arg3:要复制的元素数量


copyOf

Arrays类中存在着copyOf的很多种实现方式,在进行数组的复制过程中,我们只需要调用其中一种即可,调用方式如下;

Arrays.copyOf(elementData, size);复制代码

参数elementData:源数组对象

size:目标数组的长度

来看一下copyOf的源码,如下;

首先,创建了一个和源数组元素相同类型的新数组;

接着调用了System.arraycopy函数,并且在arraycopy函数最后一个参数(要复制的元素数量)取了设置的size源数组长度两者的最小值

最后返回了新数组


欢迎大家关注我的公众号:Ijiran的编程思维。特别声明:未经允许,禁止任何形式的转载!


Java源码原理解析、大量面试经验分享。


你可能感兴趣的:(System.arraycopy和Arrays.copyOf的原理解剖)