Arrays.copyOf 是语义清晰、调用简洁的类型安全数组拷贝方法,自动处理截取、扩容填充默认值、泛型重载、空值校验,内部基于 System.arraycopy 高效实现,但仅支持浅拷贝。

Arrays.copyOf 确实是一种类型安全的数组拷贝方式,但它真正的价值不在于“类型安全”本身(Java 泛型擦除后运行时并无强类型约束),而在于语义清晰、调用简洁、自动处理边界与默认值填充——这些特性共同降低了出错概率,让代码更健壮。
它从索引 0 开始复制,长度即目标数组大小
你只需传入原数组和想要的新长度,无需手动创建目标数组,也不用计算起始偏移。内部已封装好 System.arraycopy,保证高效;同时自动处理两种常见场景:
- newLength 小于原数组长度 → 截取前 N 个元素
- newLength 大于原数组长度 → 前段复制数据,后段补默认值(int 为 0,String 为 null)
支持泛型重载,避免强制类型转换
对 int[]、String[]、自定义对象数组等,都有对应重载方法。比如:
int[] src = {1, 2};int[] dst = Arrays.copyOf(src, 5); // 直接返回 int[],无需 (int[]) 强转
空数组和 null 判断明确,行为可预期
传入 null 会立即抛 NullPointerException,不会静默失败;传入负长度则抛 NegativeArraySizeException。这种“早报错”机制比手动循环更利于定位问题。
不是深拷贝,但对基本类型足够可靠
copyOf 对基本类型数组(如 int[])是值拷贝,修改副本不影响原数组;对引用类型(如 String[]),拷贝的是引用,不是对象本身——这点和 clone()、System.arraycopy 一致。若需真正深拷贝,需额外遍历并克隆每个元素。

















