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