增强版for循环(foreach)用于简洁安全遍历数组或Iterable集合,语法为for(元素类型 变量名:数组或集合){...},不支持获取索引、修改集合或遍历同时删除元素。

增强版 for 循环(即 foreach)在 Java 中用于简洁、安全地遍历数组或实现了 Iterable 接口的集合(如 ArrayList、HashSet、LinkedList 等),它不依赖索引,也不暴露迭代器细节,写起来更直观。
基本语法格式
标准写法是:
for (元素类型 变量名 : 数组或集合) { ... }
其中:
- “元素类型”必须与容器中实际元素类型一致(支持自动拆箱,如
int遍历int[]或Integer集合) - “变量名”是每次循环中代表当前元素的局部变量,作用域仅限于该 for 块内
- “数组或集合”必须是数组(一维或多维)或实现了
Iterable的对象;否则编译报错
常见使用示例
✅ 遍历整型数组:
int[] nums = {10, 20, 30};<br>for (int n : nums) {<br> System.out.println(n);<br>}
✅ 遍历字符串集合:
List<string> names = Arrays.asList("Alice", "Bob");<br>for (String name : names) {<br> System.out.println("Hello, " + name);<br>}</string>
✅ 遍历二维数组(外层用 foreach,内层再套一层 foreach):
int[][] matrix = {{1, 2}, {3, 4}};<br>for (int[] row : matrix) {<br> for (int val : row) {<br> System.out.print(val + " ");<br> }<br> System.out.println();<br>}
不能用 foreach 的典型场景
它虽简洁,但有明确限制:
- 无法获取当前元素索引(比如“第几个”或“是否是最后一个”)→ 改用传统
for (int i = 0; i - 不能在遍历时修改集合结构(如
list.remove()或add())→ 会抛ConcurrentModificationException,应改用Iterator的remove()方法 - 不能直接用
break或continue跳出外层循环(虽然实际可以,但无法带标签跳转多层)→ 若需复杂控制流,传统 for 更稳妥 - 不适用于需要“只遍历前 N 个”或“隔一个取一个”这类非全量顺序访问逻辑
底层其实很实在
foreach 不是新机制,而是编译器做的语法糖:
- 对集合:编译后等价于
Iteratorit = coll.iterator(); while(it.hasNext()) { T t = it.next(); ... } - 对数组:编译后展开为基于索引的传统 for 循环,性能几乎无损
所以它既保持了可读性,又没牺牲运行效率——只要用在合适的地方。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











