Какую проблему решает StringBuilder? - PullRequest
4 голосов
/ 31 марта 2011

Зачем мне использовать StringBuilder поверх просто добавляемых строк?Например, зачем реализовывать как:

StringBuilder sb = new StringBuilder;
sb.Append("A string");
sb.Append("Another string");

более

String first = "A string";
first += "Another string";

?

Ответы [ 4 ]

10 голосов
/ 31 марта 2011

Документация StringBuilder объясняет его назначение:

Объект String является неизменным.Каждый раз, когда вы используете один из методов в классе System.String, вы создаете новый строковый объект в памяти, который требует нового выделения пространства для этого нового объекта.В ситуациях, когда необходимо выполнить повторные изменения строки, накладные расходы, связанные с созданием нового объекта String, могут быть дорогостоящими.Класс System.Text.StringBuilder можно использовать, когда вы хотите изменить строку без создания нового объекта.Например, использование класса StringBuilder может повысить производительность при объединении множества строк в цикле.

5 голосов
/ 31 марта 2011

В таком простом случае, как ваш, это действительно не имеет значения. Но, как правило, строки являются неизменяемыми, это означает, что каждое изменение строковой переменной создает новый буфер в памяти, копирует новые данные и покидает старый буфер. Если вы выполняете много операций со строками, это замедляет вашу программу и приводит к большому количеству заброшенных строковых буферов, которые должны быть собраны сборщиком мусора.

0 голосов
/ 31 марта 2011

StringBuilder является изменяемым. Строки нет. Таким образом, любая операция над строкой создает новый объект. Во втором примере создаются 2 объекта (по одному в каждой строке). В то время как в первом создан только один объект.

0 голосов
/ 31 марта 2011

В основном проблемы неизменности строк.Также он предоставляет методы для более простого манипулирования строкой.Взгляните на Использование Stringbuilder Class

...