В Java String является неизменным. Будучи неизменными, мы имеем в виду, что после создания строки мы не можем изменить ее значение.
StringBuffer является изменяемым. После создания объекта StringBuffer мы просто добавляем содержимое к значению объекта, а не создаем новый объект.
StringBuilder аналогичен StringBuffer, но не является поточно-ориентированным. Методы StingBuilder не синхронизированы, но по сравнению с другими строками Stringbuilder работает быстрее всего.
Вы можете узнать разницу между String, StringBuilder и StringBuffer , реализовав их.