Дополнительно
Что происходит, когда компилятор Java видит много конкатенаций строк в одной строке?
Предположим, у меня есть выражение на Java, такое как:
String s = "abc" + methodReturningAString() + "ghi" +
anotherMethodReturningAString() + "omn" + "blablabla";
Как ведет себя компилятор JDK по умолчанию в Java? Делает ли он просто пять конкатенаций или же здесь используется умный трюк?
30
1
Он генерирует эквивалент:
Он достаточно умен, чтобы предварительно конкатенировать статические строки (т.е.. Вы можете назвать использование"omn" + "blablabla"
)StringBuilder
"трюком производительности", если хотите. Это определенно лучше для производительности, чем выполнять пять конкатенаций, приводящих к четырем ненужным временным строкам. Кроме того, использование StringBuilder было улучшением производительности в (я думаю) Java 5; до этого использовался StringBuffer.Редактирование: как указано в комментариях, статические строки предварительно конкатенируются, только если они находятся в начале конкатенации. В противном случае нарушается порядок операций (хотя в данном случае, я думаю, Sun может это оправдать). Итак, учитывая следующее:
он будет скомпилирован следующим образом: