码迷,mamicode.com
首页 > 编程语言 > 详细

反编译看java for-each循环

时间:2018-08-24 20:40:19      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:while   []   asn   cti   ext   代码   code   http   style   

java 1.5发行版引入的for-each循环。(引自《Effective Java》中文版第二版 第46条

如以下对数组列表的for-each循环示例:

1 public class ForEach {
2     public static void main(String[] args) {
3         java.util.ArrayList<String> list = new java.util.ArrayList<String>();
4         for (String s : list) {
5             //TODO
6         }
7     }//main
8 }

在JDK1.8.0_151的环境下,利用javac工具编译上面的代码,得到ForEach.class字节码文件,然后利用javap反编译这份字节码文件,如下图所示:

技术分享图片

注意,反编译结果出现了java.util.Iterator类,并且出现了其hasNext和next方法。

看到这里,大概也明白了,for-each循环本质上其实是对迭代器模式的利用。

更简单的说,文章开头的那段代码,其实是这样的:

1 public class ForEach {
2     public static void main(String[] args) {
3         java.util.ArrayList<String> list = new java.util.ArrayList<String>();
4         java.util.Iterator<String> iter = list.iterator();
5         while(iter.hasNext()) {
6             iter.next();
7         }
8     }//main
9 }

两个比较一下,for-each更加简洁,这就是for-each的优点。

也因此,可以说for-each循环是java的一颗语法糖。

【总结】:for-each循环是java语法糖,本质是迭代器模式的使用。

 

反编译看java for-each循环

标签:while   []   asn   cti   ext   代码   code   http   style   

原文地址:https://www.cnblogs.com/guohengcook/p/9531763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!