Java - foreach 语法糖

本文探讨了Java中的foreach循环语法,通过字节码分析和反编译展示了其底层实现原理,证明了foreach实际上是for loop的语法糖。在代码示例中,展示了foreach循环在字节码层面的执行流程,并通过IDEA的反编译插件将其转换为等效的for循环形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

探究 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 的语法糖。

Foreach语法糖是一种编程语言提供的便于程序员书写代码的语法形式。在Java中,Foreach语法糖通过迭代器实现了对集合的遍历。实际上,foreach语句会调用List.iterator()方法获取一个迭代器,然后使用该迭代器进行迭代操作。这样,开发人员可以使用更简洁的语法来遍历集合中的元素。 在Java中,foreach语法糖要求集合必须实现Iterable接口才能使用。通过使用foreach语法糖,可以提高代码的可读性,提高语法的严谨性,并减少编码错误的机会。下面是一个示例代码: ```java List<Integer> list = Arrays.asList(12, 30, 88); for (Integer num : list) { System.err.println(num); } ``` 这段代码使用了foreach语法糖来遍历一个整数类型的List集合。在每次循环中,将当前元素赋值给变量num,并执行相应的操作。通过这种方式,我们可以更简洁地遍历集合的元素。 你还可以参考Microsoft官方文档了解更多关于foreach语法糖的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java语法糖foreach](https://blog.youkuaiyun.com/luoyoub/article/details/82894978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [你认识的C# foreach语法糖,真的是全部吗?](https://blog.youkuaiyun.com/qq_30236895/article/details/128022710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值