Назад к вопросам
Junior
70
questionbank
В чем отличие между StringBuilder и StringBuffer?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
| Свойство | StringBuilder | StringBuffer |
|---|---|---|
| Потокобезопасность | Не потокобезопасен | Потокобезопасен |
| Производительность | Выше | Ниже |
| Синхронизация | Нет синхронизации методов | Методы синхронизированы |
| Использование | В однопоточных средах | В многопоточных средах |
Оба класса предназначены для изменения последовательности символов без создания нового объекта строки при каждой операции. Основное различие заключается в потокобезопасности и, как следствие, в производительности.
// Пример использования StringBuilder
StringBuilder sb = new StringBuilder("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString(); // result = "Hello World"
// Пример использования StringBuffer
StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" ");
sbf.append("World");
String result = sbf.toString(); // result = "Hello World"
В многопоточной среде использование StringBuffer гарантирует корректную работу при одновременном доступе из разных потоков, в то время как StringBuilder может привести к непредсказуемым результатам (состояния гонки). В однопоточной среде использование StringBuilder предпочтительнее из-за лучшей производительности, так как накладные расходы на синхронизацию отсутствуют.