前言
探究 foreach 循环语法糖。
代码
首先,当然是先看下代码:
public static void foreach(int[] arr) {
for (int i : arr) {
System.out.println(i);
}
}
执行后生成的相关字节码为:
0 aload_0
1 astore_1
2 aload_1
3 arraylength
4 istore_2
5 iconst_0
6 istore_3
7 iload_3
8 iload_2
9 if_icmpge 31 (+22)
12 aload_1
13 iload_3
14 iaload
15 istore 4
17 getstatic #5 <java/lang/System.out : Ljava/io/PrintStream;>
20 iload 4
22 invokevirtual #6 <java/io/PrintStream.println : (I)V>
25 iinc 3 by 1
28 goto 7 (-21)
31 return
对 .class
文件进行反编译。
反编译
此处我使用的是 IDEA 自带的反编译插件,得到的代码是:
public static void foreach(int[] arr) {
int[] var1 = arr;
int var2 = arr.length;
for(int var3 = 0; var3 < var2; ++var3) {
int i = var1[var3];
System.out.println(i);
}
}
结论
foreach 循环就是 for loop 的语法糖。