arrays.fill() 是批量赋值操作,用于将数组指定范围内元素设为同一值,不改变长度或释放内存;对基本类型填字面量,对引用类型填同一引用,需警惕共享对象陷阱。

Java 中用 Arrays.fill() 重置数组状态,不是“清空数组”,而是批量赋值——它把指定范围内的所有元素设为同一个值,常用于快速恢复初始状态或屏蔽旧数据。
明确 fill 的作用边界
Arrays.fill() 不改变数组长度,也不释放内存,只是覆盖元素值。对基本类型数组(如 int[]、boolean[]),它填入指定字面量;对引用类型数组(如 String[]、Object[]),它填入同一引用(即所有位置指向同一个对象或 null)。
- 填
0或false可模拟“清零”效果,但逻辑上仍是赋值操作 - 填
null对引用数组安全,但需确保后续代码能处理 null 值 - 不能用它来“删除”元素或缩短数组——数组长度固定,只能靠逻辑标记无效位
典型清洗场景与写法
常见于循环复用数组的场景,比如批处理、缓存缓冲区、状态标志位重用等。
- 整型计数器数组重置:
Arrays.fill(counts, 0); - 布尔开关数组初始化:
Arrays.fill(visited, false); - 字符串数组清空引用:
Arrays.fill(buffer, null); - 只重置部分区间(如前10个):
Arrays.fill(data, 0, 10, -1);
注意引用数组的陷阱
对 String[] 或自定义对象数组调用 fill(arr, new Item()),会导致所有元素引用同一个实例——修改任一位置的属性,其他位置同步变化。
- 正确做法是:先
fill(arr, null),再按需逐个新建对象赋值 - 若需批量初始化不同对象,不用
fill,改用循环或Arrays.setAll() - 工具类中封装重置逻辑时,要区分基本类型和引用类型的处理策略
替代方案对比:何时不用 fill
当目标是“逻辑清空”而非“统一赋值”时,fill 不够灵活。
- 需要每个元素初始化为不同值 → 用
Arrays.setAll()或 for 循环 - 只想标记某些位置失效(如跳过已处理项)→ 用布尔标记数组 + 索引跳过,不重置整个数组
- 频繁创建/销毁小数组 → 直接 new 新数组比 fill 更清晰,避免状态残留风险
Arrays.fill 是轻量级状态重置的有效工具,关键在理解它只是“批量赋值”,不是“数据清理”的万能解。用对了省代码,用错了反而埋坑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











