Java基礎:增強for迴圈的原理
阿新 • • 發佈:2022-04-20
目錄
1 背景
java的for迴圈遍歷元素的方法中,有一種增強for迴圈(Java's enhanced for loop)。這個是Java中的一個語法糖。目的是為了讓程式碼更簡潔優雅。今天我們探討一下,它背後的原理是什麼?
2 原理
-
使用條件
首先,當且僅當 一個類實現了 Iterable 介面時,它才能使用該語法糖。 -
反編譯程式碼
// 此處假設 MenuItem 實現了 Iterable 介面,以下是原始碼 for (MenuItem menuItem: menuItems) { System.out.println(menuItem); } // 以下是上面的原始碼反編譯後的程式碼 Iterator var1 = this.menuItems.iterator(); while(var1.hasNext()) { MenuItem menuItem = (MenuItem)var1.next(); System.out.println(menuItem); }
-
結論
看到反編譯後的程式碼,一目瞭然,我們自然清楚了其中的原理。
其實就是在編譯時,編譯器將 該語法糖程式碼 轉換為了普通語法的程式碼。 -
延伸
如果一個類未實現 Iterable 介面,而對其使用該語法糖,則編譯時報錯:foreach not applicable to type 'java.lang.String'。
而我們檢視 Iterable 介面的原始碼,會發現其中有個 forEach() 方法,那麼會不會和這個方法有關呢?
大家可以試試看,另外編寫一個介面,把 Iterable 介面中的程式碼 複製過去,嘗試實現該介面,能否使用該語法糖;然後,去掉其中的 forEach() 方法,再測試能否使用該語法糖。
當然,這只是我的一個不成熟的猜想?如果你測試了,還請告訴我測試的結果。