Кроме очевидного класса
String, в стандарте Java существует еще
StringBuffer и
StringBuilder. Класс
String иммутабелен, а эти два вспомогательных класса реализуют для него
паттерн Builder и служат способом редактирования строки без относительно дорогого пересоздания объекта.
Все методы
StringBuffer синхронны. В Java 1.5 ему на замену пришел несинхронизированный вариант
StringBuilder. Эта ситуация аналогична
HashMap и Hashtable. В остальном эти два класса почти ничем не отличаются, имеют одинаковый набор методов и конструкторов.
Для буфера и билдера не работает синтаксический сахар строк:
- Их нельзя создать литералом, вместо этого используется обычный конструктор;
- Нельзя конкатенировать оператором +, вместо этого используются обычные методы
insert и append.
Сам оператор конкатенации
константных выражений, компилируется в
интернированную строку, но
для не-констант неявно использует
StringBuilder.