Harkitse:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
Miltä vastaava for
-silmukka näyttäisi ilman for each-syntaksia?
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
Huomaa, että jos sinun täytyy käyttää i.remove();
silmukassa tai käyttää varsinaista iteraattoria jollakin tavalla, et voi käyttää for ( : )
-idiomia, koska varsinainen iteraattori on vain päätelty.
Kuten Denis Bueno totesi, tämä koodi toimii mille tahansa objektille, joka toteuttaa Iterable
-rajapinnan.
Lisäksi jos for (:)
-idiomin oikea puoli on array
eikä Iterable
-objekti, sisäinen koodi käyttää int-indeksilaskuria ja tarkistaa sen sijaan array.length
:n. Katso Java Language Specification.
Javassa for-each-silmukka käyttää taustalla olevaa iteraattorimekanismia. Se on siis identtinen seuraavan kanssa:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}