普通for循环适合需索引、修改或倒序的场景;增强for适用于只读遍历;stream api适合函数式处理,注意int[]须用arrays.stream()而非stream.of()。

Java 数组遍历不是“怎么写都行”的事,而是根据是否需要索引、是否修改元素、是否做复杂计算来选对方式的过程。用错循环,轻则逻辑出错,重则运行时崩溃或数据不生效。
普通 for 循环:要索引、要修改、要倒序就靠它
这是控制力最强的方式,适合所有需要定位位置或动态改值的场景。
- 正向遍历写法:for (int i = 0; i —— 必须用 arr.length,别硬写数字
- 倒序遍历写法:for (int i = arr.length - 1; i >= 0; i--) —— 常用于栈式处理或避免并发修改问题
- 二维数组安全写法:for (int i = 0; i ,内层用 matrix[i].length,防不规则数组越界
- 修改原数组必须这样写:arr[i] = arr[i] * 2; —— 增强 for 中直接赋值无效
增强 for 循环(for-each):只读遍历时最简洁安全
语法干净,自动避开越界风险,但本质是“取副本”,不能反推到原数组。
- 基本写法:for (int x : arr) { System.out.println(x); }
- 无法获取下标 —— 如果你需要打印“第3个元素是5”,它做不到
- x = 0 不会改变 arr[?] —— 它只是局部变量,不是引用
- 支持所有数组类型(int[]、String[]、自定义对象数组),也适用于 List 等集合
Arrays 工具类:批量操作一步到位,省得手写循环
很多常见需求,其实不用自己写循环,java.util.Arrays 已经封装好了。
- Arrays.toString(arr) —— 打印数组内容,避免输出 [I@xxxxxx 这种哈希地址
- Arrays.fill(arr, 99) —— 整体设值,比写 for 更快更直观
- Arrays.sort(arr) —— 升序排序,基本类型用快速排序,对象需实现 Comparable
- Arrays.equals(a, b) —— 比较两个数组内容是否完全一致,逐元素判等
Stream API(Java 8+):函数式处理复杂逻辑的利器
当你要过滤、转换、聚合或并行处理时,Stream 比嵌套 if+for 更清晰、更易维护。
- 基础遍历:Arrays.stream(arr).forEach(System.out::println)
- 求偶数和:Arrays.stream(arr).filter(n -> n % 2 == 0).sum()
- 转成 List:Arrays.stream(arr).boxed().collect(Collectors.toList())
- 注意:int[] 要用 Arrays.stream(),不能用 Stream.of(),否则整个数组被当作一个元素
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











