国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

foreach解析

2019-11-10 20:31:23
字體:
來源:轉載
供稿:網友

foreach語法相信大家都不會陌生吧,接下來我們進行詳細分析,提出幾個問題?

什么情況下才能使用foreach語法進行遍歷?

先看代碼:

public class T01 implements Iterable<Integer>{ @Override public Iterator<Integer> iterator() { return new Iterator<Integer>() { @Override public boolean hasNext() { return true; } @Override public Integer next() { return 1; } @Override public void remove() { } }; } public static void main(String[] args) { T01 t01 = new T01(); for (Integer integer : t01) { System.out.PRintln(integer); } }}

當然程序會無限打印,為了演示我并沒有優化。看出來了吧,要使用foreach語法,必須實現接口Iterable;

foreach怎么使用iterator呢?

看代碼:

public class T01{ public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (Integer each : list) { } }}

我們進行javap編譯:

public static void main(java.lang.String[]); Code: 0: new #16 // class java/util/ArrayList 3: dup 4: invokespecial #18 // Method java/util/ArrayList."<init>":()V 7: astore_1 8: aload_1 //ArrayList實例入棧 9: invokeinterface #19, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator; 14: astore_3 //構造遍歷器,并保存到局部變量 3中, 15: goto 28 //一下都是遍歷跳轉到28 18: aload_3 19: invokeinterface #25, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object; 24: checkcast #31 // class java/lang/Integer 27: astore_2 28: aload_3 29: invokeinterface #33, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z 34: ifne 18 //棧頂數不為0跳轉到18,也就是next方法。為什么不是判斷true。因為虛擬機考慮到指令太多會造成沒必要的復雜度,對boolean只提供有限的支持,在Java中涉及到boolean類型值的運算,在編譯之后都使用int數據類型來代替。 37: return

看到這里應該明白了吧,其實就是對foreach語法編譯期優化,運用Iterator進行遍歷。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大竹县| 崇左市| 浪卡子县| 明溪县| 尉氏县| 汝城县| 蓬安县| 宁蒗| 长顺县| 青海省| 龙州县| 仙桃市| 恩施市| 广西| 武定县| 井研县| 龙川县| 呼图壁县| 罗江县| 西乡县| 沙河市| 舟山市| 峨眉山市| 邯郸市| 济宁市| 随州市| 廉江市| 仙桃市| 普陀区| 乳源| 黔西县| 常德市| 浑源县| 惠来县| 喀喇沁旗| 屯门区| 陆良县| 康定县| 镇平县| 临澧县| 淮安市|