Разница между циклами for-each и традиционным for в Java заключается в том, что for использует внешний итератор (переменную), а for-each — внутренний итератор перебираемого объекта. 3
Цикл for применяют, когда число итераций известно программе до начала цикла. 1 Он позволяет полностью настраивать поведение цикла: задавать начальное значение индексной переменной, устанавливать шаг её изменения, определять условие завершения. 1
Цикл for-each используют, когда нужно обработать все элементы массива или коллекции. 1 Он сам поочерёдно берёт значения из массива или коллекции и помещает их в указанную перед двоеточием переменную. 2 Важно, чтобы тип переменной, указанной перед двоеточием, совпадал с типом массива или коллекции. 2
Таким образом, for-each удобен, например, для вложенной итерации нескольких коллекций и простого выполнения итерации объектов, реализующих Iterable. 3 Однако он бесполезен, когда необходим явный итератор или индекс массива. 3