String - неизменяемый (immutable) класс. Любая операция, изменяющая String, фактически создает новый объект String. Подходит для строк, которые не будут часто меняться.
StringBuilder и StringBuffer - изменяемые (mutable) классы. Позволяют эффективно модифицировать строки без создания новых объектов на каждую операцию изменения.
Ключевые отличия:
| Признак | String | StringBuilder | StringBuffer |
|---|---|---|---|
| Изменяемость | Неизменяемый | Изменяемый | Изменяемый |
| Потокобезопасность | Потокобезопасен (из-за неизменяемости) | Не потокобезопасен | Потокобезопасен (методы синхронизированы) |
| Производительность | Медленнее для частых изменений | Быстрее для частых изменений (в однопоточной среде) | Медленнее StringBuilder из-за синхронизации |
Пример:
java
Выбор между ними зависит от требований к изменяемости строки и потокобезопасности в конкретной ситуации. Для однопоточных приложений, где требуются частые модификации строки, StringBuilder обычно предпочтительнее из-за лучшей производительности. В многопоточных приложениях, где несколько потоков могут одновременно изменять одну строку, используется StringBuffer для обеспечения потокобезопасности. String используется, когда строка не требует изменений после создания.