La première des deux que vous spécifiez est une boucle C for
classique. Cela donne au programmeur le contrôle sur les critères d'itération et permet trois opérations: l'initialisation; le test de boucle; l'expression d'incrément. Bien qu'il soit souvent utilisé pour répéter progressivement pour un certain nombre de tentatives, comme dans l'exemple yor:
for (int i=0; i < N : i++)
Il y a beaucoup d'autres cas dans le code où le for
était utilisé pour itérer sur les collections:
for (Iterator iter = myList.iterator(); iter.hasNext();)
Pour alléger la mise en place du second type (où la troisième clause était souvent inutilisée), et pour compléter le Generics introduit dans Java 1.5, le deuxième de vos deux exemples - la boucle améliorée pour, ou le for-each loop
- a été introduit.
La seconde est utilisée avec les tableaux et les collections génériques. See this documentation. Il vous permet de parcourir une collection générique, où vous connaissez le type de Collection
, sans avoir à convertir le résultat du Iterator.next()
en un type connu.
Comparez:
for(Iterator iter = myList.iterator; iter.hasNext() ;) {
String myStr = (String) iter.next();
//...do something with myStr
}
avec
for (String myStr : myList) {
//...do something with myStr
}
Ce 'nouveau style' pour la boucle peut être utilisée avec des tableaux ainsi:
String[] strArray= ...
for (String myStr : strArray) {
//...do something with myStr
}
ou un tableau. Ou collection régulière si votre variable est de type Objet :-) – ChssPly76
Elle n'est pas exclusive aux collections génériques. –
@pavel - Je suis prêt à en faire une réponse wiki si vous voulez en ajouter d'autres. – akf