Для массивов цикл for-each преобразуется компилятором Java в обычный цикл for с индексной переменной. Это означает, что ваш фрагмент кода примерно эквивалентен следующему:
String[] strings = collectMyStrings();
int length = strings.length;
for (int i = 0; i < length; i++) {
String s = strings[i];
System.out.println(s);
}
Итак, как видите, метод вызывается только один раз. Даже свойство длины массива читается только один раз.