arrays.copyof用于复制并改变数组长度,支持动态扩容;新长度大于原长度时末尾补默认值,小于则截断。

Arrays.copyOf 主要用于需要“复制并改变长度”的场景,不是单纯拷贝,而是以原数组为模板,生成一个指定新长度的新数组。
实现动态扩容(如模拟 ArrayList 底层)
当数组容量不足需增长时,用 copyOf 快速创建更大数组,并保留原有元素。原数组引用可被丢弃,由新数组接替。
- 新长度 > 原长度:末尾补默认值(如 int 补 0,Object 补 null)
- 新长度
- 示例:int[] bigger = Arrays.copyOf(arr, arr.length * 2);
方法参数校验或边界处理时临时缩容
某些 API 要求输入数组不能超过某长度,或需排除末尾无效占位元素,可用 copyOf 安全截取有效段。
- 比手动 new + System.arraycopy 更简洁、不易出错
- 例如解析协议数据后,只取前 actualSize 个有效项:byte[] valid = Arrays.copyOf(raw, actualSize);
不可变封装:返回副本防止外部修改
类内部持有数组,对外提供 getter 时,不直接返回引用,而是用 copyOf 返回一份长度一致的副本,保障内部状态安全。
- 比 Arrays.copyOf(original, original.length) 更明确意图,且比 clone() 更类型安全(泛型友好)
- 尤其适用于 public 方法返回 int[]、String[] 等原始类型数组场景
替代部分 for 循环初始化场景
需要构造一个固定长度、大部分元素相同(如全 0、全 null)的数组时,可先用 copyOf 创建再局部赋值,比循环更简短。
- 例如:String[] arr = Arrays.copyOf(new String[0], 10); // 得到长度为 10 的 null 数组
- 后续只需设置少数几个位置,避免显式循环填 null
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











