为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java 源码

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

那么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的源码,如下;

public static <T> T[] copyOf(T[] arg,int arg0) {
   return (Object[]) copyOf(arg,arg0,arg.getClass());
}	
public static <T, U> T[] copyOf(U[] arg, int arg0,Class<? extends T[]> arg1){
  Object[] arg2 = arg1 == Object[].class ? 
        (Object[]) (new Object[arg0]): 
        (Object[]) ((Object[]) Array.newInstance(arg1.getComponentType(), arg0));
  System.arraycopy(arg,0,arg2,0,Math.min(arg.length, arg0));
  return arg2;	
}

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

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

最后返回了新数组


欢迎关注微信公众号:Ijiran的编程思维。不定时分享面试经验、各大公司面试题、
Java源码解析、jquery原理分析等文章,关注微信公众号可以及时获得技术文章、面试资源推送。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消