目录
一、foreach的作用
遍历容器或者数组中的元素。从学C语言开始,我们知道可以用循环获取容器中的所有元素,后来接触Java,知道还可以用迭代器获取容器中的所有元素,foreach也是一种遍历容器所有元素的方法。
那么foreach是怎么实现的呢?
二、foreach实现原理
看一个简单的例子:
public static void main(String[] args) {
String[] ss = {"1", "2", "3"};
List<String> list = new ArrayList<>(Arrays.asList(ss));
for (String s : list) {
System.out.println(s);
}
list.clear();
List<Apple> list1 = new ArrayList<>();
list1.add(new Apple());
list1.add(new Apple());
list1.add(new Apple());
for (Apple apple : list1) {
System.out.println(apple);
}
}
反编译后:
public static void main(String[] paramArrayOfString) {
String[] arrayOfString = { "1", "2", "3" };
ArrayList localArrayList = new ArrayList(Arrays.asList(arrayOfString));
for (Object localObject1 = localArrayList.iterator();
((Iterator)localObject1).hasNext(); ) {
localObject2 = (String)((Iterator)localObject1).next();
System.out.println((String)localObject2);
}
localArrayList.clear();
localObject1 = new ArrayList();
((List)localObject1).add(new Apple());
((List)localObject1).add(new Apple());
((List)localObject1).add(new Apple());
for (Object localObject2 = ((List)localObject1).iterator();
((Iterator)localObject2).hasNext(); ) {
Apple localApple = (Apple)((Iterator)localObject2).next();
System.out.println(localApple);
}
}
从反编译的代码中可以看到,foreach被编译成了通过迭代器方式实现的循环遍历。也就是说foreach语法实际上是通过迭代器实现的。