Ответ
В C# существуют только string (ключевое слово, синоним System.String) и StringBuilder (System.Text.StringBuilder). StringBuffer — это класс из Java, в C# его нет.
Ключевые различия:
-
string(System.String):- Неизменяемый (immutable) тип. Любая операция, изменяющая строку (
Substring,Replace, конкатенация+), создает новый объект в памяти. - Оптимален для хранения и представления текста, который не будет меняться.
- Частые модификации приводят к нагрузке на сборщик мусора из-за создания множества промежуточных объектов.
- Неизменяемый (immutable) тип. Любая операция, изменяющая строку (
-
StringBuilder:- Изменяемый (mutable) класс, специально разработанный для эффективного построения строк через множество операций.
- Хранит символы во внутреннем массиве. Операции вроде
AppendилиInsertмодифицируют этот массив, не создавая новых объектов, пока не будет достигнута его емкость. - Для получения конечной строки необходимо вызвать метод
.ToString().
Практический пример:
// НЕЭФФЕКТИВНО с String: создается 100 промежуточных строк.
string result = "";
for (int i = 0; i < 100; i++)
{
result += i.ToString(); // Каждое присваивание создает новый объект!
}
// ЭФФЕКТИВНО с StringBuilder: изменения происходят "на месте".
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
sb.Append(i); // Модифицирует внутренний буфер
}
string finalResult = sb.ToString(); // Создание строки происходит один раз
Рекомендация: Используйте StringBuilder, когда вам нужно выполнить много (особенно в цикле) операций по модификации строки. Для простых конкатенаций или неизменяемых строк достаточно string.