Предполагается, что в целом предпочтительнее использовать StringBuilder для конкатенации строк в Java. Всегда ли это так?
Я имею в виду следующее: накладные расходы на создание StringBuilder объекта, вызов append() метода и, наконец, toString() уже меньше, чем конкатенация существующих строк с помощью + оператора для двух строк, или это целесообразно только для более (чем двух) строк?
Если существует такой порог, от чего он зависит (возможно, от длины строки, но каким образом)?
И, наконец, не могли бы вы обменять удобочитаемость и лаконичность + конкатенации на производительность StringBuilder в меньших случаях, таких как две, три или четыре строки?
Если вы используете конкатенацию строк в цикле, что-то вроде этого,
Strings=""; for (inti=0; i < 100; i++) { s += ", " + i; }
тогда вам следует использовать StringBuilder (не StringBuffer) вместо String, потому что это намного быстрее и потребляет меньше памяти.
Если у вас есть один оператор,
Strings="1, " + "2, " + "3, " + "4, " ...;
тогда вы можете использовать Strings, потому что компилятор будет использовать StringBuilder автоматически.
Ответ 2
Ответ Ральфа потрясающий. Я бы предпочел использовать класс StringBuilder для сборки / оформления строки, потому что его использование больше похоже на шаблон Builder.
Его можно использовать как помощник / конструктор для построения строки, а не саму строку.
Ответ 3
Как общее правило, всегда используйте более читаемый код и проводите рефакторинг только в том случае, если возникает проблема с производительностью. В этом конкретном случае самые последние JDK фактически оптимизируют код до версии StringBuilder в любом случае.
Обычно вам действительно нужно делать это вручную, только если вы выполняете конкатенацию строк в цикле или в каком-то сложном коде, который компилятор не может легко оптимизировать.
Проведите те же тесты в своей среде и проверьте, выполняет ли более новый JDK или ваша реализация Java какой-либо тип операции со строками лучше с String или лучше с StringBuilder.