Вопрос-ответ

When to use StringBuilder in Java [duplicate]

Когда использовать StringBuilder в Java

Предполагается, что в целом предпочтительнее использовать StringBuilder для конкатенации строк в Java. Всегда ли это так?

Я имею в виду следующее: накладные расходы на создание StringBuilder объекта, вызов append() метода и, наконец, toString() уже меньше, чем конкатенация существующих строк с помощью + оператора для двух строк, или это целесообразно только для более (чем двух) строк?

Если существует такой порог, от чего он зависит (возможно, от длины строки, но каким образом)?

И, наконец, не могли бы вы обменять удобочитаемость и лаконичность + конкатенации на производительность StringBuilder в меньших случаях, таких как две, три или четыре строки?

Явное использование StringBuilder для регулярных конкатенаций упоминается как устаревшее в устаревших советах по оптимизации Java, а также в городских мифах Java.

Переведено автоматически
Ответ 1

Если вы используете конкатенацию строк в цикле, что-то вроде этого,

String s = "";
for (int i = 0; i < 100; i++) {
s += ", " + i;
}

тогда вам следует использовать StringBuilder (не StringBuffer) вместо String, потому что это намного быстрее и потребляет меньше памяти.

Если у вас есть один оператор,

String s = "1, " + "2, " + "3, " + "4, " ...;

тогда вы можете использовать Strings, потому что компилятор будет использовать StringBuilder автоматически.

Ответ 2

Ответ Ральфа потрясающий. Я бы предпочел использовать класс StringBuilder для сборки / оформления строки, потому что его использование больше похоже на шаблон Builder.

public String decorateTheString(String orgStr){
StringBuilder builder = new StringBuilder();
builder.append(orgStr);
builder.deleteCharAt(orgStr.length()-1);
builder.insert(0,builder.hashCode());
return builder.toString();
}

Его можно использовать как помощник / конструктор для построения строки, а не саму строку.

Ответ 3

Как общее правило, всегда используйте более читаемый код и проводите рефакторинг только в том случае, если возникает проблема с производительностью. В этом конкретном случае самые последние JDK фактически оптимизируют код до версии StringBuilder в любом случае.

Обычно вам действительно нужно делать это вручную, только если вы выполняете конкатенацию строк в цикле или в каком-то сложном коде, который компилятор не может легко оптимизировать.

Ответ 4

Взгляните на: http://www.javaspecialists.eu/archive/Issue068.html и http://www.javaspecialists.eu/archive/Issue105.html

Проведите те же тесты в своей среде и проверьте, выполняет ли более новый JDK или ваша реализация Java какой-либо тип операции со строками лучше с String или лучше с StringBuilder.

2023-05-15 15:15 java string performance