Arrays.fill 是 Java 中重置数组最直接高效的方式,不创建新数组仅修改内容,支持全数组、局部区间、多维数组及对象数组的重置,但对象数组需警惕浅拷贝陷阱。

Arrays.fill 是 Java 中重置数组数据最直接、最高效的方式,它不创建新数组,只修改已有内容。一行代码就能完成原本需要循环十次的操作,尤其在复用数组、清空缓存、重置状态等场景中优势明显。
全数组重置:初始化与复用一步到位
新建数组后统一设默认值,或旧数组复用前清空状态,用最简重载即可:
- 基本类型安全高效:int[] arr = new int[10000]; Arrays.fill(arr, -1); —— 所有元素立刻为 -1;JVM 可能触发 intrinsic 优化,比手写 for 更快
- 布尔/字节全覆盖:Arrays.fill(flags, true)、Arrays.fill(bytes, (byte) 0xFF),无需额外类型转换
- 引用类型填字面量或 null 安全:String[] names = new String[10]; Arrays.fill(names, "N/A"); 或 Arrays.fill(names, null)
局部区间重置:精准控制,避免误操作
只需重置某一段(如滑动窗口、DP 数组前缀、缓存头部),三参数版本更可靠:
- 语法是 Arrays.fill(array, fromIndex, toIndex, value),区间为左闭右开 [fromIndex, toIndex)
- toIndex 可等于数组长度,例如 Arrays.fill(data, 100, data.length, 0) 安全清空后段
- 常见用途:清零某段 int 数组、重置滑动窗口内的数据、动态规划中预设无效状态(如 Arrays.fill(dp, 0, k, Integer.MAX_VALUE))
多维数组重置:逐层调用,语义清晰
Java 不支持二维数组直接填充,但可通过增强 for 循环高效实现:
立即学习“Java免费学习笔记(深入)”;
- 规则矩阵每行同值:for (int[] row : matrix) Arrays.fill(row, 7);
- 每行不同值:for (int i = 0; i < matrix.length; i++) Arrays.fill(matrix[i], i * 10);
- 注意不能写成 Arrays.fill(matrix, new int[]{0,0}) —— 这只会让所有行指向同一个一维数组对象
对象数组重置:警惕浅拷贝陷阱
Arrays.fill 对象数组时填的是引用,不是新实例,这点必须明确:
- 填字面量或 null 安全:Arrays.fill(users, null)、Arrays.fill(strs, "")
- 填 new 对象危险:Arrays.fill(objArr, new Date()) 会让所有元素指向同一实例;改一个,全跟着变
- 需独立对象时必须循环创建:for (int i = 0; i < objArr.length; i++) objArr[i] = new User();
不复杂但容易忽略。



















