Java的ForEach

ForEach是Java5带来的新特性之一。尽管有其局限性,ForEach还是极大方便了程序员编写简介的代码。那么,其底层是如何实现的呢?

来看一个段简单的求和程序:

public 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

编译的结果可知,操作栈的大小为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

时间: 2024-10-25 00:37:59

Java的ForEach的相关文章

Java中forEach, 用来遍历数组

这里的for是Java中forEach, 用来遍历数组的.for(int i : d) 就是遍历int型数组d的 每一次访问数组d的时候读取的数据放入int型的i中.和for(int i=0;i<d.length();i++)是一样的,但是forEach的可用场合较多. public class e1 {public static void main(String[] args){ int[]d=new int[] {1,2,3,4,64,1234,3124,657,22}; System.ou

再学Java 之 foreach循环

从Java 5 之后,Java提供了一种新的循环:foreach循环,这种循环遍历数组和集合更加简洁. foreach循环语法格式如下: for ( type variableName : array | collection){ //variableName自动迭代访问每个元素 } 在很多书籍中,都能找到这么一句话"使用foreach循环迭代数组元素时,并不能改变数组元素".如: String books = {"a","b","c&

Java 8 forEach简单例子(转载)

forEach and Map 1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.put("A", 10); items.put("B", 20); items.put("C", 30); items.put("D", 40); items.put("E", 50); items.put("

PHP和Java中foreach循环的用法区别

1.foreach语句介绍: ①PHP: foreach 语法结构提供了遍历数组的简单方式.foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息. ②Java: foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便.foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本.foreach并不是一个

Java 8 forEach简单例子

1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.put("A", 10); items.put("B", 20); items.put("C", 30); items.put("D", 40); items.put("E", 50); items.put("F", 60); f

Java之Foreach语句

Foreach是for语句的特殊简化版本,但任何时候的foreach语句都可以改写成for语句.Foreach语句在遍历数组等方面为程序员提供了很大的方便 语法如下: For(元素变量 x:遍历对象obj){ 引用了x的java语句 } 实例: package Foreach1; public class Foreach1 { public static void main(String[] args) { int [] arr={1,3,5,7,9,11,13,15};    //声明一维数组

java基础 Foreach循环

java SE5 引入了一种新的更简洁的for语句用于数组和容器,即foreach语法,表示不必要创建int变量去对有访问构成的序列进行计数,foreach将自动的产生每一项. 任何一个数组的方法都可以使用foreach,例如: public class ForEachString{ public static void main(String[] args){ foreach( char c : "Hello world".toCharArray( ) ) ; System.out.

Java:foreach实现原理

第一部分: For-each Loop Purpose The basic for loop was extended in Java5 to make iteration over arrays and other collections more convenient. This newer for statement is called the enhanced for or for-each (because it is called this in other programming

C# 和Java的foreach的不同用法

循环语句为苦逼的程序猿们提供了很大的便利,有while.do...while.for和 foreach.而且foreach语句很简洁,但是它的优点不仅仅在于此,它的效率也是最高的. 作为两个开发语言,用法当然有所不同.下面就分别说下各自的用法. C# foreach用法: foreach(type objName in collection/Array) 这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type是你所要读取的数组对象将要存储在objName变量的数据类型,而ob