Java的ForEach
2020-11-27 11:11
标签:java ForEach是Java5带来的新特性之一。尽管有其局限性,ForEach还是极大方便了程序员编写简介的代码。那么,其底层是如何实现的呢? 来看一个段简单的求和程序:
编译后的字节码如下:
编译的结果可知,操作栈的大小为2,本地变量数组的大小为5。指令0-3将数组arrs引用放到本地变量数组1号元素里。指令4-6首先获得数组arrs大小,然后放到本地变量数组2号元素里。7-8将本地数组3号位初始化位0。9-11加载数组3号元素和2号元素(arrs的大小),if_icmpge大小比较,如果大于则跳转到34号指令直接返回(34:return)。14-17读取数组arrs中的元素(下标是本地数组3号元素的值),并存到本地数组4号位置。19-25加载4号位和sum变量值,并且相加,结果再存回去。28指令将本地数组3号元素加1。31指令则跳转到9号指令上。 可见,ForEach指令同普通的for循环是一样的,只是省略了下标而已。 Java的ForEach,搜素材,soscw.com Java的ForEach 标签:java 原文地址:http://blog.csdn.net/alburthoffman/article/details/24850247public class ForEach {
private static int[] arrs = new int[]{1,2,3,4};
private static int sum = 0;
public static void main(String[] argv) {
for (int e : arrs) {
sum += e;
}
}
}
public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=5, args_size=1
0: getstatic #2 // Field arrs:[I
3: astore_1
4: aload_1
5: arraylength
6: istore_2
7: iconst_0
8: istore_3
9: iload_3
10: iload_2
11: if_icmpge 34
14: aload_1
15: iload_3
16: iaload
17: istore 4
19: getstatic #3 // Field sum:I
22: iload 4
24: iadd
25: putstatic #3 // Field sum:I
28: iinc 3, 1
31: goto 9
34: return
下一篇:再解java中的String