Arrays.copyOf 不仅复制数组,还能一步初始化带默认值的数组:数值类型填0、boolean填false、引用类型填null;支持预设长度+部分赋值;适用于测试数据构造;但仅浅拷贝,对象数组需注意引用共享。

Arrays.copyOf 不只是复制工具,它能直接替代部分初始化逻辑,让代码更紧凑、意图更明确。
用 copyOf 初始化带默认值的数组
传统方式要先 new 再 fill,而 copyOf 一步到位:指定长度后自动填充类型默认值。
- 数值类型(如 int[])扩容或新建时,多出位置填 0;boolean[] 填 false
- 引用类型(如 String[])填 null,无需额外调用 Arrays.fill
- 例如:String[] arr = Arrays.copyOf(new String[0], 5); → 得到长度为 5、全为 null 的字符串数组
用 copyOf 实现“预设长度 + 部分赋值”场景
当业务需要固定大小容器但只初始化前 N 个元素时,copyOf 比手动循环更安全简洁。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 比如日志缓冲区设为 100 容量,但初始只存前 3 条:LogEntry[] buffer = Arrays.copyOf(entries, 100);
- entries 若只有 3 个元素,结果数组前 3 位是原内容,后 97 位自动为 null
- 避免了 new + for + 判空等冗余步骤
结合 copyOf 和原始数据快速构造测试用数组
在单元测试或原型开发中,常需构造含特定前缀、后缀或占位的数组,copyOf 可减少样板代码。
立即学习“Java免费学习笔记(深入)”;
- 从短数组“拉伸”成指定长度:int[] test = Arrays.copyOf(new int[]{1, 2}, 6); → [1, 2, 0, 0, 0, 0]
- 配合 copyOfRange 可拼接片段,例如取旧配置前 2 项 + 新增 3 项默认值
- 比写 new int[6] + 赋值前两项 + 循环补零更直观
注意浅拷贝特性对初始化逻辑的影响
copyOf 对对象数组只复制引用,这点在初始化阶段容易被忽略,但关系到后续修改是否影响源头。
- 若原始数组含可变对象(如 ArrayList[]),新数组里仍是同一对象引用
- 真正需要独立副本时,不能依赖 copyOf 初始化,得配合深拷贝逻辑或重建实例
- 适合初始化场景通常是“创建空白/半空白容器”,而非“隔离已有状态”

















