Ответ 1
Он генерирует эквивалент:
String s = new StringBuilder("abc")
.append(methodReturningAString())
.append("ghi")
.append(anotherMethodReturningAString())
.append("omn")
.append("blablabla")
.toString();
Он достаточно умен, чтобы предварительно конкатенировать статические строки (т.е. . Если хотите, вы можете использовать "omn" + "blablabla"
)StringBuilder
"трюк производительности". Это определенно лучше для производительности, чем выполнение пяти конкатенаций, что приводит к четырем ненужным временным строкам. Кроме того, использование StringBuilder было улучшением производительности в (я думаю) Java 5; до этого использовался StringBuffer.
Изменить: как указано в комментариях, статические строки только предварительно конкатенатированы, если они находятся в начале конкатенации. В противном случае будет нарушен порядок операций (хотя в этом случае я думаю, что Sun может это оправдать). Итак, учитывая это:
String s = "abc" + "def" + foo() + "uvw" + "xyz";
он будет скомпилирован следующим образом:
String s = new StringBuilder("abcdef")
.append(foo())
.append("uvw")
.append("xyz")
.toString();