Java遍历数组最常用、最安全的是增强型for循环,适用于只读访问;需索引或修改元素时必须用传统for循环,因增强型for中修改element不影响原数组,而传统for通过array[i]赋值才能真正修改。

Java 里遍历数组最常用、最安全的方式是增强型 for 循环(也叫 for-each),但不是所有场景都适用;需要索引或修改元素时,必须用传统 for 循环。
用 for-each 遍历数组(推荐用于只读访问)
这是最简洁、不易出错的写法,适用于不需要下标、不修改原数组的场景,比如打印、求和、查找某个值。
- 语法:
for (Type element : array),element是每次迭代的副本,修改它不会影响原数组 - 不能在循环中删除或添加元素,否则会抛出
ConcurrentModificationException(对数组本身不生效,但若误用于List容易踩坑) - 不支持反向遍历或跳步(如每两个取一个)
int[] nums = {1, 2, 3, 4};
for (int n : nums) {
System.out.println(n); // 输出 1 2 3 4
}
用传统 for 循环遍历(需要索引或修改时必选)
当你要知道当前下标、修改数组内容、按条件跳过某些位置,或者从后往前遍历,就必须用这个。
- 起始索引始终是
0,终止条件用i ,别写成,否则抛ArrayIndexOutOfBoundsException -
array.length是字段(不是方法),别加括号 - 性能上与
for-each几乎无差别,JVM 会做类似优化
String[] names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.length; i++) {
if ("Bob".equals(names[i])) {
names[i] = "BOB"; // 修改原数组元素
}
}
用 Arrays.stream() 遍历(适合函数式操作)
如果你要过滤、映射、聚合(如找最大值、拼接字符串),用流更清晰,但注意:它会额外创建对象,小数组没必要过度使用。
立即学习“Java免费学习笔记(深入)”;
- 必须导入
java.util.Arrays - 原始类型数组(如
int[])需用Arrays.stream(array),而包装类数组(如Integer[])要用Arrays.asList(array).stream() - 流遍历默认不保证顺序(但数组流是有序的),且不能在
forEach中修改原数组(同for-each)
int[] scores = {85, 92, 78};
Arrays.stream(scores)
.filter(s -> s >= 80)
.forEach(System.out::println); // 输出 85 92
真正容易被忽略的是:增强型 for 的变量是数组元素的**值拷贝**(基本类型)或**引用拷贝**(对象),改它不等于改数组;而传统 for 中通过 array[i] = ... 才是真修改。这点在调试逻辑错误时经常卡住人。










