arrays.fill() 要求数组非空且索引合法,否则抛出 nullpointerexception 或 arrayindexoutofboundsexception;区间填充为左闭右开,二维数组需逐行调用;填基本类型、字符串字面量或 null 安全,但不可填可变对象实例。

Arrays.fill() 不会自动帮你兜底,边界安全全靠你写对参数——填错索引直接抛 ArrayIndexOutOfBoundsException,传 null 数组立刻触发 NullPointerException。它快、简洁、语义明确,但绝不容错。
数组非空是前提
调用前必须确保数组引用不为 null。Arrays.fill 对 null 零容忍,不会静默跳过或返回提示:
- ✅ 安全写法:if (arr != null) Arrays.fill(arr, 0);
- ❌ 危险写法:Arrays.fill(arr, 0); // arr == null 时崩溃
索引范围要严格守界
区间填充(fill(arr, from, to, val))的边界规则固定且严格:
- from 必须 ≥ 0,否则抛异常
- to 必须 ≤ arr.length,越界即崩
- from == to 是合法空操作,不报错也不填充
- from > to 也不报错,但同样不执行任何填充
注意:区间是「含头不含尾」,fill(arr, 2, 5, x) 只影响索引 2、3、4 —— 和 substring(2, 5) 一致,不是 Python 风格。
二维数组别碰“一键填充”陷阱
对 int[][] matrix 直接调用 Arrays.fill(matrix, row) 是典型误用:
- ❌ 错误:所有行引用同一数组对象,改一行,全行同步变
- ✅ 正确:逐行填充,for (int[] r : matrix) Arrays.fill(r, 0);
- ⚠️ 注意:即使每行长度不同(锯齿数组),也必须单独初始化每行再 fill,不能依赖模板复用
填什么值才真正安全
值的安全性取决于类型和可变性:
- 基本类型字面量(
0、false、'\0')完全安全 - 字符串字面量(
"N/A")因常量池机制也安全 - null 填入引用数组(如
String[])合法,但后续使用需判空 - ❌ 避免填可变对象实例(如
new ArrayList()、new Date()),否则所有元素共享同一对象
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











