arrays.fill 是 java 中高效批量初始化数组的工具,支持全数组或指定范围填充统一值,适用于基本类型和引用类型,但引用类型需注意对象共享问题。

Arrays.fill 是 Java 中快速为数组批量赋相同默认值的高效工具,特别适合初始化占位符场景。
适用场景:需要统一占位符的数组初始化
当数组用于缓存、队列、状态标记等用途时,常需用特定值(如 0、-1、null、"" 或自定义对象)作为初始占位符。Arrays.fill 比循环更简洁,且底层优化,性能更好。
- 基本类型数组(int、double 等):常用 0、-1、Double.NaN 等表示未设置或无效状态
- 引用类型数组(String、Object 等):常用 null 或空字符串 "" 表示待填充位置
- 避免手动 for 循环,减少出错可能,代码更可读
基础用法:全数组填充同一值
调用 Arrays.fill(array, value) 即可将整个数组设为指定值:
- int[] flags = new int[10]; Arrays.fill(flags, -1); → 所有元素变为 -1,表示“未启用”
- String[] names = new String[5]; Arrays.fill(names, ""); → 每个位置为空字符串,预留填写空间
- boolean[] visited = new boolean[100]; Arrays.fill(visited, false); → 显式初始化为 false(虽 boolean 默认为 false,但显式更清晰)
进阶技巧:按范围填充,灵活控制占位区域
使用 Arrays.fill(array, fromIndex, toIndex, value) 可只填充子区间,适合分阶段初始化:
- 初始化前 N 个位置:Arrays.fill(buffer, 0, n, 0);
- 跳过头部元数据区,从索引 5 开始填充业务数据占位符:Arrays.fill(data, 5, data.length, -999);
- 引用类型同样适用:Arrays.fill(cache, 2, 8, new CacheEntry());(注意:所有元素引用同一对象实例,如需独立对象,仍需循环创建)
注意事项:引用类型与不可变值的区分
对引用类型数组,Arrays.fill 复制的是引用,不是对象本身:
- 填 null 或字符串字面量(如 "")安全,因它们是不可变的
- 填 new 出的对象(如 new Date())会导致所有数组元素指向同一个实例,修改任一元素会影响全部 → 此时应改用 for 循环逐个 new
- 若需深拷贝或独立对象占位,不能依赖 fill,必须显式构造











