java数组克隆性能取决于拷贝层级:system.arraycopy()是jvm原生内存级拷贝,最快;arrays.copyof()封装其并自动创建新数组;clone()为一维数组提供简洁浅拷贝;手动循环最慢但可控。

Java 数组克隆不是“复制内容”这么简单,而是和内存布局强绑定的操作。真正影响性能的,是拷贝发生在哪一层——JVM 原生内存搬运,还是 Java 层逐个赋值。
System.arraycopy():唯一真正的内存级拷贝
这是性能最高的方式,因为它是 JVM 底层 native 实现(通常用 C 编写),绕过字节码解释器和对象创建流程。
- 执行前校验参数合法性(数组非 null、索引不越界等)
- 若源和目标是同一数组,会自动按方向处理重叠区域(类似 memmove)
- 对基本类型数组,直接搬移连续字节;对引用类型数组,只搬移对象地址(即浅拷贝)
- 不支持自动创建新数组,必须提前分配好目标数组
Arrays.copyOf():封装 arraycopy 的便捷接口
它本身不拷贝,只是帮你省一步——先 new 一个数组,再调用 System.arraycopy() 完成实际工作。
- 第一步:按 newLength 创建新数组(可能扩容或截断)
- 第二步:调用 arraycopy 拷贝有效元素
- 第三步:若 newLength > 原长度,剩余位置填默认值(int 填 0,Object 填 null)
- 适合完整拷贝或需要扩容/缩容的场景
clone():轻量、简洁、一维专用
数组类继承自 Object,其 clone() 被 JVM 特别优化,行为等价于一次 System.arraycopy() 调用。
- 无需手动创建目标数组,一行代码搞定
- 仅支持一维数组,多维数组 clone 后仍是浅拷贝(第二层仍是共享)
- 基本类型数组 clone 后完全独立;对象数组 clone 后只复制引用(浅拷贝)
- 不抛 CloneNotSupportedException,因为数组类默认实现 Cloneable
手动循环:最慢但最可控
纯 Java 层遍历赋值,性能最低,但能插入自定义逻辑(如转换、过滤、条件跳过)。
- 每次访问都经过边界检查,有额外开销
- 适合小数据量或需要定制化拷贝逻辑的场景
- 对对象数组,可在循环中主动 deep clone 每个元素
- 无法利用 CPU 缓存批量读写优势,不适合大数据量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











