java数组拷贝需依场景选方法:system.arraycopy()最快但需预分配目标数组;arrays.copyof()及copyofrange()封装创建逻辑,适合日常开发;clone()语法最简但仅支持完整拷贝且对象数组为浅拷贝;手动循环最灵活但性能较低。

Java 数组拷贝不是“复制一下”就完事的事。选对方法,能省下毫秒级延迟;选错,可能引发数据误改、扩容失败,甚至线上性能抖动。关键不在“能不能拷”,而在“怎么拷得又快又准”。
System.arraycopy():高性能的底层搬运工
这是 JVM 提供的 native 方法,直接操作内存,速度最快。它不关心类型细节,只做字节级搬移,所以要求源数组和目标数组类型一致(比如 int[] → int[]),否则运行时报 ArrayStoreException。
- 必须提前创建好目标数组,且长度 ≥ 拷贝长度,否则抛 IndexOutOfBoundsException
- 支持任意起始位置与长度:可截取后三位、向右平移两位、覆盖写入——适合游戏逻辑、音视频帧处理等精细操作
- 参数顺序固定:源数组、源起点、目标数组、目标起点、长度。记不住?就默念“源源目标长”
Arrays.copyOf() 与 copyOfRange():日常开发主力
这两个方法内部都调用 System.arraycopy(),但封装了目标数组创建逻辑,省去 new 步骤,代码更短、容错性更强。
- copyOf(original, newLength):常用于扩容。newLength 大于原长时,多出位置填默认值(int 为 0,引用类型为 null)
-
copyOfRange(original, from, to):左闭右开区间,语义清晰。例如
copyOfRange(arr, 1, 4)拷贝索引 1、2、3 共三个元素,自动创建长度为 3 的新数组 - 二者都不支持错位写入或覆盖式拷贝,但胜在简洁安全,是业务代码中最推荐的默认选择
clone():一行搞定的完整拷贝
所有数组类都重写了 clone(),调用只需一行:int[] copy = (int[]) src.clone();
- 语法最简,对基本类型数组完全安全
- 只能完整拷贝,无法指定范围;也不适用于泛型集合(因类型擦除导致 clone 不安全)
- 对对象数组仍是浅拷贝:新数组中每个元素仍是原对象引用。修改对象属性,原数组对应对象也会变
手动循环:灵活但需谨慎
逐个赋值看似原始,却是唯一能嵌入自定义逻辑的方式——比如只拷贝偶数、跳过 null、做单位换算等。
- 小数据量(
- 容易写错边界(i ≤ length 还是 i
- 除非真有定制需求,否则不建议在高频路径中使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











