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