Foreach实现原理
前言
已知集合和数组都可以使用foreach方式进行循环遍历,官网介绍说,“实现了Iterable接口的类,都可以使用foreach”。(在jdk5版本引入的)
下面直接以示例说明。
一、Foreach原理
示例源码:
import java.util.ArrayList;
public class Test4 {
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList<>();
for (String i : strings) {
System.out.println(i);
}
int[] ints = {1, 2, 3};
for (int i : ints) {
System.out.println(i);
}
}
}
以上是最常见的写法,表面看起来,也简单易懂,但就不明白,怎么就实现了遍历了。后来查了相关资料才发现,是java虚拟机搞的鬼,于是本人便查看了编译后的class文件,源码如下:
import java.util.ArrayList;
import java.util.Iterator;
public class Test4 {
public Test4() {
}
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList();
Iterator var2 = strings.iterator();
while(var2.hasNext()) {
String i = (String)var2.next();
System.out.println(i);
}
int[] ints = new int[]{1, 2, 3};
int[] var8 = ints;
int var4 = ints.length;
for(int var5 = 0; var5 < var4; ++var5) {
int i = var8[var5];
System.out.println(i);
}
}
}
一目了然。
那么谁的效率高呢?不想说太多,打字累,你们想吧!