Java foreach原理
从字节码可以看出,foreach使用了Iterator迭代器,循环判断hashNext(),用next()取操作对象。
Collection接口继承了Iterable接口,可以获取iterator对象。【Iterator
集合对象有对应的xxIterator,实现具体的hashNext()、next()、remove()等操作。
反编译源码更直观。
测试源码1
2
3
4
5
6
7
8
9
10
11public class ForEachTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
for (Integer i : list) {
System.out.println(i);
}
}
}
IDE反编译源码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class ForEachTest {
public ForEachTest() {
}
public static void main(String[] args) {
List<Integer> list = new ArrayList();
list.add(1);
list.add(2);
Iterator var2 = list.iterator();
while(var2.hasNext()) {
Integer i = (Integer)var2.next();
System.out.println(i);
}
}
}
字节码foreach部分节选
1 | for (Integer i : list) { |