← Назад к вопросам

Что такое StringBuffer?

1.0 Junior🔥 181 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое StringBuffer?

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

Основные характеристики

Изменяемость: в отличие от String, StringBuffer позволяет модифицировать содержимое без создания новых объектов.

Потокобезопасность: все методы StringBuffer синхронизированы, что гарантирует безопасность в многопоточной среде.

Производительность: при множественных конкатенациях StringBuffer намного быстрее, чем конкатенация строк через оператор +.

Основные методы StringBuffer

// Создание StringBuffer
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer("Hello");
StringBuffer sb3 = new StringBuffer(50); // с начальной ёмкостью

// Добавление текста
sb.append(" World");
sb.append(123);
sb.append(true);

// Вставка текста в определённую позицию
sb.insert(0, "Start: ");

// Удаление символов
sb.delete(0, 5); // удаляет с позиции 0 по 5
sb.deleteCharAt(2); // удаляет символ на позиции 2

// Замена текста
sb.replace(0, 5, "NEW");

// Реверс (разворот)
sb.reverse();

// Получение подстроки
String substring = sb.substring(0, 5);

// Получение длины
int length = sb.length();

// Получение символа на позиции
char ch = sb.charAt(0);

// Преобразование в String
String result = sb.toString();

Пример практического использования

// Неправильный способ — создаст много объектов String
public String concatenateInefficient(String[] words) {
    String result = "";
    for (String word : words) {
        result += word + " "; // создаёт новый String на каждой итерации
    }
    return result;
}

// Правильный способ с StringBuffer
public String concatenateEfficient(String[] words) {
    StringBuffer sb = new StringBuffer();
    for (String word : words) {
        sb.append(word).append(" "); // переиспользует тот же объект
    }
    return sb.toString();
}

StringBuffer vs String vs StringBuilder

String: неизменяемая, безопасна, медленна при конкатенации.

StringBuffer: изменяемая, потокобезопасна, медленнее StringBuilder из-за синхронизации.

StringBuilder: изменяемая, не потокобезопасна (появился в Java 5), но быстрее StringBuffer в однопоточной среде.

// StringBuffer — безопасен в многопоточной среде
StringBuffer threadSafeBuffer = new StringBuffer();
threadSafeBuffer.append("Thread safe");

// StringBuilder — быстрее, но не потокобезопасен
StringBuilder fastBuilder = new StringBuilder();
fastBuilder.append("Fast but not thread-safe");

Производительность

Для построения длинной строки из 1000 слов:

  • String с +: ~1000 новых объектов, очень медленно
  • StringBuffer: 1 объект, медленнее из-за синхронизации
  • StringBuilder: 1 объект, самый быстрый

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

  • StringBuffer: многопоточное приложение, где несколько потоков обращаются к одному StringBuffer
  • StringBuilder: однопоточная среда, высокая производительность критична
  • String: когда строка не меняется, или нужна неизменяемость

На современных проектах StringBuilder применяется гораздо чаще, так как многопоточное управление обычно осуществляется на уровне более высоких архитектурных слоёв.

Что такое StringBuffer? | PrepBro