2015-08-19 44 views

回答

3

取決於。

這個循環有兩個版本,用於數組和Iterable(比如List)。

對於數組,編譯器將創建一個「普通」for (int i=0; i<arr.length; i++)循環。所以在這裏你有這個指數。

對於Iterable,它變成while(iter.hasMore()){。所以循環本身沒有索引。根據Iterable的實施情況,Iterator內可能還有一個。

+5

JLS [§14.14.2]中的所有血淋淋細節(https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14.2) 。 –

0

沒有設計辦法知道在foreach循環當前索引,它的工作原理不喜歡

for(int i = 0; i < list.length; i++) 

但像:

Iterator<String> iter = list.iterator(); 
while (iter.hasNext()) 
0

我想你已經知道,一個類的任何實例實現Iterable接口可以在foreach循環中使用。對於任何有限的對象集合,如果不進行某種內部管理(大多數情況下是索引),則無法實現Iterator。所以,實際上索引存儲在某個地方,儘管我們無法訪問它。

看看iterator方法的AbstractList實現,看看它是如何實現的。

相關問題