arrays.fill 是 java 中为已创建数组批量设固定值最直接、安全且高效的方式,不分配新内存,只修改原数组内容,但需注意维度、类型及引用共享风险。

Arrays.fill 是 Java 中为已创建数组批量设固定值最直接、安全且高效的方式。它不分配新内存,只修改原数组内容,一行代码就能完成初始化或重置——语义清晰、性能可靠,但用错维度或类型,反而会引发引用共享、逻辑错误甚至运行时异常。
一维数组:全量填充最常用也最安全
新建数组后快速赋予统一初始值,避免手写 for 循环冗余。JVM 对基本类型数组(如 int、boolean)底层常优化为内存块拷贝,实测比普通循环快近 3 倍。
- 数值型占位:
int[] buf = new int[10000]; Arrays.fill(buf, -1);表示“未计算”状态 - 布尔开关初始化:
boolean[] visited = new boolean[5000]; Arrays.fill(visited, false); - 字符串占位符:
String[] names = new String[200]; Arrays.fill(names, "N/A");(填字面量安全,所有元素指向同一字符串实例)
精准控制区间填充:左闭右开,跳过头尾或重置缓存段
无需手写边界判断,直接指定起止索引(含头不含尾),适合滑动窗口、DP 预设、局部清空等场景。
- 只初始化前 n 个:
Arrays.fill(arr, 0, n, 0) - 清空中间一段:
Arrays.fill(cache, offset, offset + len, 0) - 动态规划无效值预设:
Arrays.fill(dp, 0, k, Integer.MAX_VALUE) - 安全写法建议:用
Math.min(toIndex, arr.length)防越界;确保fromIndex ≥ 0且fromIndex ≤ toIndex
二维数组:逐层调用是唯一安全路径
Java 二维数组本质是“数组的数组”,直接 Arrays.fill(matrix, row) 会导致所有行指向同一对象,引发连锁修改 Bug。
- 正确做法:
for (int[] row : matrix) Arrays.fill(row, 7);—— 每行独立填充,无共享风险,且比双重 for 快 20–30% - 禁止写法:
Arrays.fill(matrix, new int[]{0,0})或Arrays.fill(matrix, -1)(编译失败或运行时报 ArrayStoreException) - 若需每行不同值,可用索引控制:
for (int i = 0; i
对象数组:填的是引用,不是新对象
Arrays.fill 对象数组时只复制引用,多个位置指向同一内存地址。这点必须明确,否则修改一个就等于改了全部。
- 填
null或不可变对象(如"OK"、Integer.valueOf(42))安全 - 填可变对象(如
new ArrayList()、new StringBuilder())危险,所有元素共享同一实例 - 需独立对象时,改用循环:
for (int i = 0; i 或 <code>Arrays.setAll(arr, i -> new User("user" + i, i)); - 调试技巧:打印
System.identityHashCode(arr[i])可验证是否为同一实例
不复杂但容易忽略:Arrays.fill 不创建新对象、不处理 null 数组、不保证线程安全;它胜在语义明确——“我要把这一片全设成这个值”。用对场景,就是最简洁可靠的初始化工具。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











