arrays.fill是java中批量设置数组元素值的工具,支持全数组或指定范围(fromindex到toindex-1)赋同值,适用于基本类型和引用类型数组,但对引用类型仅赋引用而非深拷贝,多维数组需逐维调用。

Arrays.fill 是 Java 中用于批量设置数组元素值的便捷工具,它支持对整个数组或指定范围内的元素统一赋值,底层通过循环实现,简洁高效。
基本用法:填充整个数组
最简单的形式是将数组所有元素设为同一值:
- int[] arr = new int[5];
- Arrays.fill(arr, 7); // arr 变为 [7, 7, 7, 7, 7]
适用于 byte、short、int、long、float、double、char、boolean 和 Object 类型数组(包括 String 等引用类型)。
指定范围填充:fromIndex 到 toIndex - 1
使用重载方法 Arrays.fill(array, fromIndex, toIndex, value) 可精确控制起止位置:
- char[] chars = {'a', 'b', 'c', 'd', 'e'};
- Arrays.fill(chars, 1, 4, 'x'); // 索引 1、2、3 被设为 'x'
- // 结果:['a', 'x', 'x', 'x', 'e']
注意:toIndex 是**不包含**的右边界,且必须满足 0 ≤ fromIndex ≤ toIndex ≤ array.length,否则抛出 IllegalArgumentException。
常见注意事项与避坑点
- 对引用类型数组(如 String[]),fill 设置的是**引用地址**,不是深拷贝。多个位置指向同一个对象时,修改该对象会影响所有位置。
- 无法用 fill 实现“每个元素不同”的赋值(如递增序列),需用 for 循环或 IntStream。
- 多维数组需对每一维单独 fill,例如 Arrays.fill(matrix[i], value) 填充某一行。
- 原始类型数组效率高;Object 数组 fill 的是 null 或指定引用,不调用构造函数。
对比手动循环:何时选 fill?
当目标是**统一值、固定范围、代码可读性优先**时,fill 更清晰:
- // 清零某段 int 数组
- Arrays.fill(data, start, end, 0); // 比 for 更直观
- // 初始化布尔数组为 true
- Arrays.fill(flags, true);
若需动态计算每个值(如 i*i)、条件判断或复杂逻辑,则仍应使用传统循环。











