arrays.fill是java中为已创建数组批量设固定值最直接、安全且高效的方式,支持全数组填充、区间填充(左闭右开)和多维数组逐层调用,但不分配内存、不保证线程安全,对象数组填充时需防引用共享。

Arrays.fill 是 Java 中为已创建数组批量设固定值最直接、安全且高效的方式。它不创建新数组,只修改原数组内容,语义清晰,一行代码就能完成初始化或重置操作。
全数组填充:快速统一设值
适用于新建数组后整体“上色”,或复用数组时一键清空/重置:
- 基本类型填默认非零值:如 int[] buf = new int[1000]; Arrays.fill(buf, -1); 表示“未计算”状态
- 布尔数组显式开关:如 boolean[] visited = new boolean[500]; Arrays.fill(visited, false);
- 字符串占位:如 String[] names = new String[10]; Arrays.fill(names, "N/A");(填字面量安全)
区间填充:精准控制局部赋值
当只需初始化某一段(如动态规划前缀、滑动窗口缓冲区),用带索引的重载更精确高效:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 语法是 Arrays.fill(arr, fromIndex, toIndex, value),区间为左闭右开 [fromIndex, toIndex)
- 例如:int[] dp = new int[100]; Arrays.fill(dp, 0, 10, -1); ——仅初始化前10个元素
- 务必校验:fromIndex ≥ 0、toIndex ≤ arr.length、fromIndex ≤ toIndex,否则抛异常
多维数组处理:逐层调用不可省
Arrays.fill 不支持自动展开嵌套结构,二维及以上需手动遍历每一维:
- 二维数组每行单独 fill:for (int[] row : matrix) Arrays.fill(row, 0);
- 若填对象(如 new ArrayList()),必须每个位置 new 独立实例;Arrays.fill(matrix, new ArrayList()) 会导致所有行共享同一引用
- 不能对 Object[][] 直接填一维数组对象,那只会让每行指向同一个数组引用
注意事项与常见陷阱
看似简单,但几个细节容易引发隐蔽问题:
- boolean[] 只能填 true 或 false,传 1 或 "true" 会编译失败
- 对象数组填的是引用,多个位置指向同一对象实例;需独立对象时,改用循环或 Arrays.setAll
- JVM 对基本类型数组有默认初始化(0/false/’\u0000’),但显式 fill 更明确,尤其在数组复用场景下
- 性能上,Arrays.fill 是 JVM 优化的本地实现,比手写 for 循环略快,远优于 Stream 固定值填充
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










