Первым из двух указанных вами является классический цикл C for
. Это дает программисту контроль над критериями итерации и позволяет выполнять три операции: инициализация; тест петли; выражение приращения. Хотя он часто используется для последовательного повторения для заданного количества попыток, как в вашем примере:
for (int i=0; i < N : i++)
В коде есть еще много случаев, когда for
использовался для перебора коллекций:
for (Iterator iter = myList.iterator(); iter.hasNext();)
Чтобы облегчить компоновку второго типа (где третье предложение часто не использовалось) и дополнить Generics , представленный в Java 1.5, второй из двух ваших примеров - расширенный цикл for for-each loop
- был введен.
Второй используется с массивами и общими коллекциями. См. Эту документацию . Он позволяет перебирать универсальную коллекцию, в которой вы знаете тип Collection
, без необходимости приведения результата Iterator.next()
к известному типу.
Сравните:
for(Iterator iter = myList.iterator; iter.hasNext() ; ) {
String myStr = (String) iter.next();
//...do something with myStr
}
с
for (String myStr : myList) {
//...do something with myStr
}
Этот «новый стиль» для цикла можно использовать и с массивами:
String[] strArray= ...
for (String myStr : strArray) {
//...do something with myStr
}