arrays.copyof 是 java 中简洁安全的数组拷贝方法,支持截断、扩容和默认值填充,一行代码替代手动循环,语义清晰且不修改原数组。

Arrays.copyOf 是 Java 中最常用也最直观的数组拷贝方式,它能快速创建新数组并复制指定长度的元素,特别适合需要截取、扩容或简单复制的场景。
Arrays.copyOf 的核心用法
该方法签名是 Arrays.copyOf(T[] original, int newLength),内部自动处理类型推断和边界检查。传入原数组和目标长度,返回一个新数组——长度小于原数组则截断,大于则用默认值(如 0、null)填充。
- 拷贝全部元素:
int[] copy = Arrays.copyOf(original, original.length); - 只取前 3 个:
int[] head = Arrays.copyOf(data, 3);(若 data 长度不足 3,结果会补 0) - 扩容到 10 个位置:
String[] bigger = Arrays.copyOf(names, 10);(多余位置为 null)
替代手动 for 循环,提升可读性
过去常写 for 循环逐个赋值,既冗长又易出错。用 copyOf 后逻辑一目了然,尤其在工具方法或参数预处理中效果明显。
- 重构前:需声明新数组、写循环、处理索引边界
- 重构后:一行代码表达“我要一个副本,长度是 X”,语义清晰
- 注意:它不修改原数组,符合函数式编程中“不可变”的常见预期
与 clone() 和 System.arraycopy 的差异点
clone() 虽快但返回 Object,需强制转型且对多维数组只做浅拷贝;System.arraycopy 更底层、性能略优,但参数多、易写错下标。copyOf 在简洁性和安全性之间做了很好平衡。
- clone():
int[] c = original.clone();—— 只支持同长度,无截断/扩容能力 - System.arraycopy:需提前新建目标数组,4 个参数(源、源起点、目标、目标起点、长度)
- copyOf:封装了这些细节,专注“我要什么结果”,而非“怎么搬”
实战重构建议
在已有项目中识别以下典型代码块,可优先用 copyOf 替代:
- 方法入参校验时临时截取前 N 项
- 缓存计算结果前做一次安全拷贝,避免外部修改影响内部状态
- 构建固定长度配置数组(如初始化 8 个 slot,默认填 null 或 0)
- 单元测试中构造测试数据,比 new + for 更紧凑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











