1. 程式人生 > >反編譯看java for-each循環

反編譯看java for-each循環

中文 iter 註意 圖片 兩個 tor ima 這份 effect

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循環