首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明:

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

src - 源数组。 
srcPos - 源数组中的起始位置。 
dest - 目标数组。 
destPos - 目标数据中的起始位置。 
length - 要复制的数组元素的数量。 
该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。 
再来看看Arrays.copyOf();该方法对于不同的数据类型都有相应的方法重载。

  1. //复杂数据类型
  2. public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
  3. T[] copy = ((Object)newType == (Object)Object[].class)
  4. ? (T[]) new Object[newLength]
  5. : (T[]) Array.newInstance(newType.getComponentType(), newLength);
  6. System.arraycopy(original, 0, copy, 0,
  7. Math.min(original.length, newLength));
  8. return copy;
  9. }
  10. public static <T> T[] copyOf(T[] original, int newLength) {
  11. return (T[]) copyOf(original, newLength, original.getClass());
  12. }

由U类型复制为T类型?
original - 要复制的数组 
newLength - 要返回的副本的长度 
newType - 要返回的副本的类型

  1. //基本数据类型(其他类似byte,short···)
  2. public static int[] copyOf(int[] original, int newLength) {
  3. int[] copy = new int[newLength];
  4. System.arraycopy(original, 0, copy, 0,
  5. Math.min(original.length, newLength));
  6. return copy;
  7. }

观察其源代码发现copyOf(),在其内部创建了一个新的数组,然后调用arrayCopy()向其复制内容,返回出去。 
总结: 
1.copyOf()的实现是用的是arrayCopy(); 
2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。 
3.copyOf()在内部新建一个数组,调用arrayCopy()将original内容复制到copy中去,并且长度为newLength。返回copy;

最新文章

  1. JS鼠标事件大全 推荐收藏
  2. 安装Ubuntu的那些事儿(续)
  3. sharedUserId
  4. Install Houdini 12.5 x64 in CentOS 7
  5. 《CSS3秘籍》(第三版)-读书笔记
  6. Atitit .html5刮刮卡的gui实现总结
  7. android之旋转的刻度盘
  8. SQL中case语句的两种方式
  9. 下载个jquery-easyui-1.3.0使用,把他导入到myeclipse10里,jquery-1.7.2.min.js报错。 错误如下, Syntax error on token &quot;Invalid Regular Expression Options&quot;, no accurate correc
  10. 微信开发模式(php)
  11. [改善Java代码]让多重继承成为现实
  12. Python 2.7 学习笔记 条件与循环语句
  13. HttpURLConnection实现两个服务端的对接
  14. lua 字符串
  15. go实现dgraph的各种操作
  16. 使用Eclipse+jlink调试STM32
  17. Python36 二进制文件读写问题
  18. Excel与Google Sheets中实现线性规划求解
  19. Function Composition vs Object Composition
  20. 【MAC】安装神器brew

热门文章

  1. Java web项目配置相关
  2. Page Control
  3. Oracle HA 之 oracle 11.2 rac库配置active dataguard
  4. flight framework 核心解读
  5. 洛谷P2024 食物链 [NOI2001] 并查集
  6. 蓝牙4.0BLE 手机控制 cc2540 CC2541 的串口透传功能已实现
  7. Java Thread 如何处理未捕获的异常?
  8. CSLA.Net学习(2)
  9. Executor框架与Thread
  10. PAT 1135 Is It A Red-Black Tree[难]