Ответ
StringBuffer — это потокобезопасный (thread-safe), изменяемый (mutable) класс для работы с последовательностями символов.
Когда использовать StringBuffer:
- Многопоточная среда: Когда один и тот же буфер может изменяться несколькими потоками одновременно. Его методы синхронизированы (
synchronized). - Частая модификация строки: Когда требуется множество операций (добавление, вставка, удаление) с одной строкой, чтобы избежать создания множества неизменяемых объектов
String.
Сравнение с аналогами:
| Класс | Изменяемость | Потокобезопасность | Производительность |
|---|---|---|---|
| String | Нет (immutable) | Да (по умолчанию) | Низкая при частой конкатенации |
| StringBuffer | Да (mutable) | Да (синхронизирован) | Средняя (из-за накладных расходов на синхронизацию) |
| StringBuilder | Да (mutable) | Нет | Высокая (оптимален для однопоточного кода) |
Пример использования StringBuffer:
StringBuffer buffer = new StringBuffer();
buffer.append("Hello");
buffer.append(" ");
buffer.append("World");
// В многопоточном контексте эти операции безопасны
String result = buffer.toString(); // "Hello World"
Рекомендация: Для однопоточных приложений всегда предпочитайте StringBuilder, так как он быстрее. Используйте StringBuffer только при явной необходимости в потокобезопасности для изменяемой строки.