В основном компилятор переписывает ваш код.
String x = "Some String";
Для конкатенации это просто синтаксический сахар для метода добавления StringBuffer, то есть это:
z += " with some more in it";
компилируется как:
z = new StringBuffer(z).append(" with some more in it").toString();
Теперь для одного конкатата это объект, созданный и 2 вызова метода, поэтому, если вы строите очень длинную строку внутри цикла, FAR эффективнее написать:
StringBuilder buf = new StringBuilder(); // Not synchronized so quicker than StringBuffer
while ( condition is true )
buf.append(...);
String z = buf.toString();
вместо:
String z = "";
while (condition is true)
z += "...";
Редактировать: пример неправильного кода удален ...