arrays.fill()适用于基本类型一维数组,简洁安全且支持子区间;对象数组需用for循环避免引用共享;二维数组需嵌套使用fill;null检查和复杂逻辑也须用for循环。

Arrays.fill() 和 for 循环都能初始化数组,但适用场景、语义清晰度和潜在风险差异明显。选哪个不只看“写得短”,更要看类型、维度、值是否独立、性能敏感度这几个关键点。
基本类型一维数组:Arrays.fill() 更简洁安全
对 int、boolean、double 等基本类型数组,Arrays.fill() 是首选:
- 代码少一行,意图明确:“我要把整个数组设成这个值”
- 底层有优化(部分实现用 native 或内存块拷贝),实测性能通常略优于手动循环
- 支持子区间填充,比如 Arrays.fill(arr, 5, 15, 0) 只改中间 10 个元素,避免手写边界出错
对象数组(如 String[]、自定义类[]):慎用 fill,多数情况该用 for
Arrays.fill(objArr, new X()) 看似方便,但所有元素会指向同一个对象实例:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 修改 objArr[0].setName("A"),objArr[1] 的 name 也会变——因为它们是同一引用
- 正确做法是显式循环创建新对象:for (int i = 0; i
- String 是不可变类型,所以 Arrays.fill(strArr, "ok") 没问题;但 ArrayList[]、Date[] 等必须避开 fill
二维及多维数组:fill 需配合循环,不是“一键全填”
Java 没有直接 fill 二维数组的 API,但可以高效组合使用:
- 所有元素填相同值(如 0、-1):for (int[] row : matrix) Arrays.fill(row, -1); ——比双重 for 更干净
- 每行填不同值(如第 i 行填 i*10):for (int i = 0; i
- 不能写 Arrays.fill(matrix, new int[]{1,2,3}),那会让所有行引用同一个一维数组,后续修改互相污染
null 安全与可读性:fill 不自动判空,for 更可控
Arrays.fill() 遇到 null 数组直接抛 NullPointerException:
- 如果数组可能为 null,必须先检查:if (arr != null) Arrays.fill(arr, val);
- 而 for 循环天然包含判空逻辑(if (arr == null) return;),结构上更鲁棒
- 当初始化逻辑复杂(如按索引奇偶设不同值、依赖前一个元素),for 循环语义更自然,fill 无法胜任
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










