怎么通过 Arrays.fill() 为大批量数组变量快速初始化默认值以替代冗长的 for 循环
作者:BrightSoul
时间:2026-07-08
浏览:0
Arrays.fill()可快速初始化数组,支持全数组或指定范围填充,代码简洁且性能优于手动循环。多维数组需逐层调用,对象数组填充的是引用副本而非独立实例,基本类型数组覆盖所有类型,调用前需判空。
在Ja va日常开发中,给数组批量赋值是一个非常基础但又频繁出现的操作。最直接的反应可能是写一个for循环逐位填充,但标准库其实提供了一个更简洁、更高效的工具——`Arrays.fill()`。它不仅让代码更易读,底层还经过了优化(比如利用native实现或内存块拷贝),性能上往往优于手动循环。那么,这个工具具体怎么用?有哪些需要注意的细节?我们逐一拆解。
---
### 基础用法:一次性填满整个数组
适用于一维基本类型数组或对象数组,只需指定数组和统一填充值即可:
```ja va
int[] arr = new int[1000];
Arrays.fill(arr, -1); // 所有元素设为 -1
String[] strs = new String[500];
Arrays.fill(strs, "N/A"); // 每个位置赋值 "N/A"
boolean[] flags = new boolean[10000];
Arrays.fill(flags, true); // 全设为 true
```
代码干净利落,一眼就能看出意图,比手写for循环少写不少括号和索引。
---
### 精准控制范围:只填充子区间,避免误操作
很多时候并不需要填满整个数组,比如只想重置中间一段数据、或者跳过首尾保留已有内容。这时可以用三参数的重载版本:
```ja va
Arrays.fill(arr, 10, 50, 0); // 从索引10(含)到50(不含),共40个位置填0
```
需要注意的是,`toIndex`如果超出数组长度会直接抛出`IndexOutOfBoundsException`。稳妥的做法是在调用前做边界校验,或者用`Math.min(toIndex, arr.length)`兜底。这个场景在实际中很常见,比如清空缓存区的某一段、或者重置滑动窗口内的数据。
---
### 多维数组需逐层调用(不能直接 fill 二维)
Ja va没有提供一个`fill`方法直接处理二维数组。但可以通过循环配合`fill`高效实现:
```ja va
int[][] matrix = new int[100][200];
for (int[] row : matrix) {
Arrays.fill(row, 7);
}
```
这比嵌套两层for循环少写内层索引逻辑,语义也更清晰,JVM也更容易优化。如果希望不同行填充不同的值,在循环内动态传参即可,比如`Arrays.fill(row, i * 10);`。
---
### 注意事项与避坑点
虽然`Arrays.fill`用起来很顺手,但有几个细节容易踩坑,提前留个心眼:
- **对象数组填充的是引用副本**,而不是创建新对象。比如:
```ja va
Date[] dates = new Date[10];
Arrays.fill(dates, new Date());
```
最后数组里每一个元素都指向**同一个**`Date`实例。如果你希望每个位置都是独立的对象,那就老老实实用for循环逐次new。
- 对`null`数组调用`fill`会直接抛出`NullPointerException`,建议调用前先做判空检查。
- 基本类型数组覆盖所有数值类型(`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`),而且不需要额外导入任何包,直接使用即可。
本文内容来源于互联网,如有侵权请联系删除。

作者最新文章
索尼 Xperia 1 VIII / VII / VI 等手机获 Android 17 更新,新增桌面模式等功能
2026-09-08 16:44
加拿大留学监护声明书(IMM 5646)双页签署与公证核对指南
2026-09-03 15:02
在线PDF转图片教程:一键生成高清图片包
2026-09-03 12:04
Creo零基础入门:新建零件与第一次拉伸建模完整指南
2026-09-03 06:02
扫描件PDF转Word的在线操作步骤与编辑可行性判断
2026-09-02 18:39
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































