您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
一位不愿透露姓名的用户 发布于2019年12月30日 01:17 最近更新于 2019年12月31日 17:38

Java 的增强for循环 For-Each 是怎么工作的?

2190 次浏览 读完需要≈ 1 分钟 Java
List<Integer> items = Arrays.asList(1, 2, 3, 4, 5);
for ( Integer item : items ) {
	System.out.println(item);
}

现在我们在Java中遍历集合,一般都会像上面的代码一样使用增强for循环,我想问问它具体是怎么实现的呢?增强for循环的实现原理是什么?

1 个回答

Ready · 4年前

Java 的增强 for 循环(即 For-Each)是 Java 5 新增的语法糖(Java 编译器自动为我们编译为常规的for循环代码)。

根据 Java 官方的语言规范所述:如果要使用增强for循环,则被迭代的目标变量必须是一个数组或者实现了java.lang.Iterable接口的集合

对于集合

java.lang.Iterable接口只定义了一个必须实现的方法:public abstract java.util.Iterator<T> iterator(),该方法用以获取迭代该集合的迭代器对象。

以提问中的上述代码为例,items为 List 接口类型(实际上我们常见的集合类型都实现了该接口),该接口已经继承了java.lang.Iterable接口。上述代码实际上就等价于以下代码:

List<Integer> items = Arrays.asList(1, 2, 3, 4, 5);
for ( Iterator<Integer> it = items.iterator(); it.hasNext(); ) {
	Integer item = it.next();
	System.out.println(item);
}

对于数组

Java For-Each 循环也支持迭代数组类型,它实际上也是常规for循环的语法糖:

Integer[] items = new Integer[]{ 1, 2, 3, 4, 5 };

for (Integer item : items) {
	System.out.println(item);
}

// 上面的 for-each 循环 等价于 下面的 for 循环

for ( int i = 0; i < items.length; i++) {
	Integer item = items[i];
	System.out.println(item);
}

此外,Java 增强 for 循环也支持原始类型的自动装箱/拆箱。

已采纳 ? 0 0 0 编辑

撰写答案