Java如何遍历数组并赋值?
- 后端开发
- 2025-06-01
- 25
在Java中,遍历数组并赋值是基础且高频的操作,本文详细讲解6种实现方法,涵盖传统循环到现代API,并提供场景建议和避坑指南。
基础遍历方法
标准for循环
直接通过索引访问并修改元素,效率最高且最灵活。
int[] arr = new int[5]; for (int i = 0; i < arr.length; i++) { arr[i] = i * 2; // 赋值:0, 2, 4, 6, 8 }
while循环
适合动态控制遍历条件,需手动管理索引:

高级遍历与工具类
Arrays.fill()统一赋值
快速填充相同值(适合初始化):
import java.util.Arrays; int[] arr = new int[5]; Arrays.fill(arr, 10); // 所有元素赋值为10
Arrays.setAll()动态赋值(Java 8+)
通过函数生成值(灵活且简洁):
import java.util.Arrays; int[] arr = new int[5]; Arrays.setAll(arr, index -> index * 3); // 赋值:0, 3, 6, 9, 12
Stream API处理(Java 8+)
函数式编程风格(适合复杂转换):

对象数组的遍历赋值
对象数组需注意引用独立性:
class User { String name; User(String name) { this.name = name; } } User[] users = new User[3]; // 正确:创建新对象赋值 for (int i = 0; i < users.length; i++) { users[i] = new User("User" + i); } // 错误示例:引用共享问题 User temp = new User("Tom"); for (User u : users) { u = temp; // 无效操作!无法修改数组元素 }
避坑指南
-
索引越界(ArrayIndexOutOfBoundsException)
- 错误:for (int i=0; i<=arr.length; i++)
- 正确:索引范围应为 [0, length-1]。
-
增强for循环(foreach)的局限性
for (int num : arr) { num = 10; // 修改的是临时变量,不影响原数组 }
原因:num是数组元素的拷贝(基本类型)或引用的拷贝(对象类型),无法直接修改数组。
-
空指针风险
未初始化的数组直接遍历会抛出NullPointerException:
int[] arr = null; for (int i=0; i<arr.length; i++) { ... } // 崩溃!
- 小数组或需索引操作 → 优先选for循环
- 统一初始值 → Arrays.fill()
- Java 8+动态赋值 → Arrays.setAll()
- 复杂链式处理 → Stream API
- 基础操作:for循环是核心,掌握索引控制和边界条件。
- 高效工具:Arrays.fill()和Arrays.setAll()简化代码。
- 现代开发:Java 8的Stream API适合函数式处理。
- 关键点:避免索引越界,理解值传递与引用传递的区别。
方法对比与选型建议
| 方法 | 适用场景 | 效率 | 灵活性 |
|---|---|---|---|
| for循环 | 通用场景,需索引操作 | ||
| Arrays.fill() | 统一初始值 | ||
| Arrays.setAll() | 动态生成值(Java 8+) | ||
| Stream API | 复杂转换或并行处理(大数据量) | ||
| while循环 | 非固定步长的遍历 |
最佳实践:
引用说明:
本文代码基于Oracle官方Java 17规范验证,遵循《Java核心技术卷I》数组操作规范,避坑指南参考实际开发中的常见错误案例。