增强for循环是只读遍历的默认首选,语法简洁、安全高效;传统for循环适用于需索引操作的场景,控制逻辑明确;配合良好命名、空数组安全处理等习惯可提升代码健壮性与可维护性。

Java 数组遍历本身不复杂,但写法选择直接影响代码是否干净、易懂、不易出错。真正的好代码不是“能跑就行”,而是让别人(包括未来的你)一眼看懂意图,且不容易改出 bug。
增强 for 循环:只读场景的默认首选
当你只需要逐个访问元素、不做索引相关操作时,增强 for 是最自然的选择。它把“我要处理每个值”这个意图表达得最直接。
- 语法干净,没有冗余的索引变量和边界判断,降低认知负担
- 自动规避
ArrayIndexOutOfBoundsException,安全性高 - 对基本类型(
int[])和引用类型(String[])都适用,行为一致 - 编译后实际仍是基于索引的访问,性能几乎无损耗
例如打印姓名列表:
for (String name : names) {<br> System.out.println("Hello, " + name);<br>}
传统 for 循环:需要索引时的可靠搭档
一旦涉及查找位置、修改原数组、比较相邻元素、按步长跳过或反向遍历,传统 for 就不可替代。它的可读性来自明确的控制逻辑。
- 索引
i显式存在,语义清晰:“从第 0 个开始,到末尾前一个为止” - 支持灵活边界,比如只遍历前半段:
for (int i = 0; i - 支持倒序:
for (int i = arr.length - 1; i >= 0; i--) - 推荐缓存长度:
for (int i = 0, len = arr.length; i ,既安全又略提效
例如交换首尾元素:
for (int i = 0; i int temp = arr[i];<br> arr[i] = arr[arr.length - 1 - i];<br> arr[arr.length - 1 - i] = temp;<br>}
Stream API:别为遍历而用,专为转换而生
如果只是 forEach 打印或累加,用 Stream 反而增加理解成本和运行开销。它的价值在于链式数据处理——过滤、映射、聚合。
- 当逻辑是“找出所有偶数并平方再求和”,才体现表达力优势
- 基本类型数组(如
int[])走Arrays.stream(arr)得到的是IntStream,避免装箱,更高效 - 简单遍历比传统 for 慢数倍,GC 压力略高,百万级数据差异明显
- 调试不如传统循环直观,堆栈信息更抽象
例如统计正数个数:
long count = Arrays.stream(nums)<br> .filter(n -> n > 0)<br> .count();
可读性背后的细节习惯
再好的结构也靠细节支撑。几个小习惯让遍历代码更健壮、更易维护:
- 变量命名体现意图:用
item、value或业务名(如userId),不用tmp、a - 空数组安全:增强 for 和传统 for 都天然支持空数组,无需额外判空
- 避免在循环体内修改数组长度(对原生数组不可能,但若误用集合包装需注意)
- 多层嵌套时,优先提取方法或使用有意义的变量名,而不是堆砌
i、j、k
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











