arrays.copyof 是 java 中最常用且安全的数组扩容/缩容方式,通过指定新长度自动处理扩容补默认值、缩容截断或等长浅拷贝,一行代码即可完成,无需手动 new 数组和循环复制。

Arrays.copyOf 可以快速创建新数组并复制原数组内容,同时灵活调整长度——这是 Java 中最常用也最安全的数组扩容/缩容方式。
核心用法:指定新长度,自动处理边界
调用 Arrays.copyOf(originalArray, newLength) 会返回一个新数组:
- 当 newLength > originalArray.length:新数组前半部分填入原数组元素,剩余位置补默认值(int 为 0,Object 为 null);
- 当 newLength :只复制前 newLength 个元素,实现截断;
- 当 newLength == originalArray.length:等价于浅拷贝,内容完全一致但地址不同。
常见场景与写法示例
不需要手动 new 数组 + 循环复制,一行就能搞定:
- 扩容到 10 个元素:int[] bigger = Arrays.copyOf(arr, 10);
- 只保留前 3 个元素:String[] shortList = Arrays.copyOf(names, 3);
- 兼容 null 安全检查:建议先判断原数组是否为 null,避免 NullPointerException。
注意类型匹配和泛型限制
Arrays.copyOf 有多个重载方法,编译器会根据参数自动选择:
- 基本类型数组(如 int[]、double[])对应各自的重载版本;
- 引用类型统一使用
T[] copyOf(T[] original, int newLength) ,返回泛型数组; - 不能直接用它转换数组类型(比如 int[] → String[]),也不支持跨类型复制。
和 System.arraycopy 的区别在哪
copyOf 内部其实调用了 System.arraycopy,但它封装了更多细节:
- 自动处理 newLength 超出原数组长度的情况(System.arraycopy 要求源长度 ≥ 复制长度);
- 自动分配目标数组空间,无需提前声明;
- 语义更清晰,意图明确,代码更简洁。











