Он должен быть, как правило, предпочтительнее использовать то StringBuilder для конкатенации строк в Java. Это всегда так?
Я имею в виду: это затраты на создание класса StringBuilder объект, вызова функции append()
метод, и, наконец, метод toString()
уже меньше, чем объединение существующих строк оператор " + " для двух строк, или это только желательно больше (чем две) строки?
Если есть такой порог, от чего это зависит (возможно, длину строки, но в какую сторону)?
И, наконец, хотели бы вы торговать на читаемость и лаконичность конкатенации +
и для исполнения класса StringBuilder в небольших корпусов как два, три или четыре струны?
Явное использование класса StringBuilder для конкатенации регулярных упоминается как устаревший в устарело Ява советы по оптимизации, а также Java и городских мифов.
Если вы используете конкатенацию строк в цикле, что-то вроде этого,
String s = "";
for (int i = 0; i < 100; i++) {
s += ", " + i;
}
затем вы должны использовать то StringBuilder(не
StringBuffer) вместо
строка`, потому что это намного быстрее и потребляет меньше памяти.
Если у вас есть один оператор,
String s = "1, " + "2, " + "3, " + "4, " ...;
затем вы можете использовать эту строку, потому что компилятор будет использовать то StringBuilder автоматически.
Ральф'ы ответ потрясающий. Я бы предпочел использовать класс StringBuilder для построения/украшения строка, потому что использование это больше похоже шаблона.
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();
}
Его можно использовать в качестве помощника/Builder для построения строки, а не саму строку.
Как правило, всегда использовать более читабельный код и только рефакторинг, если производительность является проблемой. В данном конкретном случае, самые последние версии JDK's будет оптимизировать код в то StringBuilder версия в любом случае.
Вы, как правило, только действительно нужно сделать это вручную, если вы делаете конкатенацию строк в цикле или в какой-нибудь сложный код, что компилятор может'т легко оптимизировать.
Взгляните на: http://www.javaspecialists.eu/archive/Issue068.html и http://www.javaspecialists.eu/archive/Issue105.html
Сделать те же тесты в среде и проверить, если новые JDK или реализация Java делать какой лучше строковые операции с строка
или лучше то StringBuilder
.
Некоторые компиляторы не могут заменить сцепление с StringBuilder эквиваленты. Будьте уверены, чтобы рассмотреть, что составители ваш источник будет использовать, прежде чем полагаться на компиляции оптимизации времени.
В + оператор использует публичные строку функция concat(string ул)` внутренне. Этот метод копирует символы двух строк, поэтому его требования к памяти и сложность выполнения пропорционально длине двух строк. То StringBuilder работает более эффективная.
Однако я читал здесь, что код concatination с помощью + оператор меняется к StringBuilder на пост Явы 4 составители. Так что это не может быть проблемой вообще. (Хотя я бы реально проверить это утверждение, если я завишу от нее в мой код!)
Две конкатенацию строк будет быстрее, в других случаях то StringBuilder-это лучший выбор, см. мое объяснение в https://stackoverflow.com/questions/8755063/concatenation-operator-vs-concat/13739225#13739225
Проблема с конкатенацией строк заключается в том, что он приводит к копированию объекта String со всеми сопутствующими затратами. StringBuilder не ориентирована на многопотоковое исполнение, и поэтому быстрее, чем StringBuffer, который был предпочитаемым до Java 5. Как правило, вы не должны делать конкатенацию строк в цикле, который будет вызываться часто. Я думаю здесь делаешь несколько конкатенации и там не тронет, пока вы не говорите сотни, и это, конечно, зависит от ваших требований к производительности. Если вы делаете в реальном времени, вещи, вы должны быть очень осторожны.
Сертификация материала адресов Microsoft этот же вопрос. В .Чистый мир, накладных расходов на объект StringBuilder делает простой конкатенации 2 строковых объектов более эффективным. Я предполагаю, что подобный ответ за строками Java.