上一篇                     
               
			  Java如何遍历数组并赋值?
- 后端开发
- 2025-06-01
- 4333
 使用for循环遍历数组索引,通过索引为每个元素赋值,示例代码:for (int i=0; i
 
在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循环
适合动态控制遍历条件,需手动管理索引:
int[] arr = new int[5];
int i = 0;
while (i < arr.length) {
    arr[i] = i + 1; // 赋值:1, 2, 3, 4, 5
    i++;
} 
高级遍历与工具类
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+)
函数式编程风格(适合复杂转换):
import java.util.Arrays;
import java.util.stream.IntStream;
int[] arr = IntStream.range(0, 5)
                     .map(i -> i * 4)
                     .toArray(); // 赋值:0, 4, 8, 12, 16 
对象数组的遍历赋值
对象数组需注意引用独立性:

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() | 统一初始值 | ||
| Arrays.setAll() | 动态生成值(Java 8+) | ||
| Stream API | 复杂转换或并行处理(大数据量) | ||
| while循环 | 非固定步长的遍历 | 
最佳实践:
- 小数组或需索引操作 → 优先选
for循环- 统一初始值 →
Arrays.fill()- Java 8+动态赋值 →
Arrays.setAll()- 复杂链式处理 →
Stream API
- 基础操作:for循环是核心,掌握索引控制和边界条件。
- 高效工具:Arrays.fill()和Arrays.setAll()简化代码。
- 现代开发:Java 8的Stream API适合函数式处理。
- 关键点:避免索引越界,理解值传递与引用传递的区别。
引用说明:
本文代码基于Oracle官方Java 17规范验证,遵循《Java核心技术卷I》数组操作规范,避坑指南参考实际开发中的常见错误案例。
 
  
			 
			 
			 
			 
			 
			 
			 
			