arrays.copyof 是 java 中最常用且安全的数组克隆方式,它调用 system.arraycopy 高效复制并返回全新数组对象,支持所有类型但仅浅拷贝,需注意 null 判空及二维数组限制。

Java 中数组内容克隆,Arrays.copyOf 是最常用且安全的方式之一,它能创建新数组并复制指定长度的元素,避免原数组被意外修改。
Arrays.copyOf 的核心用法
该方法底层调用 System.arraycopy,性能高效,且自动处理类型擦除问题(对泛型数组也适用)。它返回一个**全新数组对象**,与原数组内存地址不同,修改新数组不会影响原数组。
-
Arrays.copyOf(original, newLength):按指定长度复制,若newLength > original.length,则末尾补默认值(如 int 补 0,引用类型补 null) - 支持所有基本类型和引用类型数组,无需手动类型转换
- 不支持深拷贝——若数组元素是可变对象(如 String[] 中的 String 不可变,但 List[] 中的 List 可变),只复制引用,不是对象本身
常见克隆场景与写法
根据需求选择合适参数,避免越界或截断:
- 完整克隆:
int[] copy = Arrays.copyOf(original, original.length); - 截取前 N 个元素:
String[] head = Arrays.copyOf(names, 5);(若 names 长度不足 5,则补 null) - 扩容克隆:
double[] bigger = Arrays.copyOf(data, data.length * 2);(后半部分初始化为 0.0)
对比其他克隆方式
相比传统手段,Arrays.copyOf 更简洁可靠:
- 比
original.clone()更安全:后者需强制类型转换,且对多维数组只浅拷贝第一层 - 比
new int[original.length]+ 循环赋值更简洁、不易出错 - 比
System.arraycopy更易读,封装了目标数组创建逻辑,无需预先声明目标数组
注意事项与避坑点
使用时注意几个关键细节:
- 传入负数作为
newLength会抛NegativeArraySizeException - 原数组为
null时,直接抛NullPointerException,需提前判空 - 对二维数组(如
int[][]),Arrays.copyOf只复制外层数组引用,内层数组仍共享——如需深拷贝,需逐层调用 - 若需真正独立的对象副本(如数组里存的是自定义对象),应在克隆后遍历调用对象的
clone()或构造新实例
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











