StringBuilder
более эффективен, чем конкатенация строк, поскольку конкатенация строк создает новую неизменяемую строку каждый раз, когда вы ее используете, а построитель строк создает single buffer для добавления символов. This page в документе C# указывает, что объект String неизменен, а объект StringBuilder является динамическим. В нем также указывается
При изменении StringBuilder он не перераспределяет размер для себя до достижения емкости. Когда это происходит, новое пространство распределяется автоматически, а емкость удваивается. Вы можете указать емкость класса StringBuilder, используя один из перегруженных конструкторов.
Однако, по словам this article, string.Join()
имеет лучший алгоритм для добавления символов в строку.
Согласно this page в документации Java, String
s неизменяемы, а StringBuilder
s по существу то же самое, но могут быть изменены.
Похоже, что использование конкатенации строк приводит к накладным расходам на создание новой неизменяемой строки, в то время как использование построителя строк приводит к добавлению символов в буфер. Создание и инициализация нового объекта дороже, чем добавление символа в буфер, поэтому построитель строк быстрее, как правило, является конкатенацией строк.
Это не дубликат ... –
'toString()' а не 'ToString()' заставляет меня думать, что это java, а не C#. В любом случае, пожалуйста, исправьте теги для языка, который вы описываете. 'StringBuilder' является классом и может иметь разные реализации, что дает некоторые ответы потенциально недействительными. – Rob
Если это вопрос Java String, я понимаю, что конкатенация String «быстрее» с помощью оператора +, поскольку JDK/JVM оптимизируется для наиболее эффективного подхода, в последний раз, когда я смотрел, было предложено использовать StringBuilder под капот. Было высказано предположение, что если вы не конкатенируете в цикле, вы должны использовать +. По общему признанию, это было в JDK 5. – Gavin