Первая часть не делает никакой конкатенации.Конкатенация происходит во время компиляции.Все, что он делает - это сохраняет одну и ту же уникальную длинную строку во всех индексах массива.
При объединении в цикле следует использовать StringBuilder.Даже когда вы объединяете динамические вещи во время выполнения, используя
"a" + someVar + "b" + someOtherVar;
Компилятор генерирует код, который использует StringBuilder для конкатенации (или использует код по крайней мере так же быстро, как это делает StringBuilder, в зависимости от версии Java).
Что медленно:
String s = "";
for (String e : array) {
s += e;
}
Это создает много (ну, по одному на элемент массива) временных строк и множество копий этих временных строк вследующий.