选对数组复制方法需看三点:是否修改原数组、拷贝整段或局部、性能是否敏感。1. 完整拷贝用arrays.copyof()(可调长度)或clone()(需强转);2. 局部拷贝用arrays.copyofrange()(左闭右开);3. 高性能场景用system.arraycopy()(需预建目标数组);4. 自定义逻辑用for循环。

选对数组复制方法,关键看三点:要不要改原数组、拷贝整段还是局部、性能是否敏感。下面按实际开发中最常遇到的几类场景说明。
需要完整拷贝且代码要简洁
直接用 Arrays.copyOf() 或 clone()。
- Arrays.copyOf():自动创建新数组,长度可调,适合扩容或快速备份。比如把长度为3的数组扩成5个元素,多出位置填默认值(0、null等)。
-
clone():一行搞定,不需指定长度,但只能完整复制,且返回的是 Object,需强制转型(如
(int[]) arr.clone())。
只要复制某一段(比如前3个或中间5个)
优先用 Arrays.copyOfRange()。
- 它专为范围拷贝设计,参数是原数组 + 起始索引 + 结束索引(左闭右开),不用手动算长度,也不用提前声明目标数组。
- 例如
Arrays.copyOfRange(arr, 2, 5)就取下标 2、3、4 的三个元素,生成新数组。
追求极致性能,尤其是大数据量或高频调用
用 System.arraycopy()。
- 它是 JVM 底层 native 实现,速度最快,比循环快一个数量级。
- 支持任意起止位置和长度,还能跨数组“拼接”——比如把 A 数组后半段拷到 B 数组前半段。
- 注意:目标数组必须已存在,且类型要兼容,否则运行时报
ArrayStoreException。
需要自定义逻辑(比如跳过 null、转换值、过滤条件)
老实用 for 循环。
- 虽然写起来多几行,但完全可控。比如只复制正数、把字符串全转大写、跳过空对象再拷贝。
- 小数据量下性能差异不明显,可读性和可维护性反而更高。











