Чем класс String отличается от класса StringBuilder? Частенько вижу этот вопрос в списке обязательного что нужно знать, но ответа определённого я так и не нашёл
При добавлении символов StringBuilder определяет, не выходит ли новый размер массива за установленный предел. Если да, то StringBuilder автоматически удваивает емкость, и исходя из этого значения, выделяет память под новый массив, а затем копирует символы из исходного массива в новый. Исходный массив в дальнейшем утилизируется сборщиком мусора. - По Джеффри Рихтеру.
На сколько я понял, StringBuilder является изменяемым не во всех случаях. Если в StringBuilder обавить строку, то кол-во символов в результате будет больше чем может поместиться в объекте, и как итог будет выделено больше памяти, но при всём этом ссылка на объект в памяти останется прежней.
Также StringBuilder это своего рода обёртка над строками.
Строка не изменяема, а StringBuilder можно изменить.
Если менять String, то в результате получим новую строку, а старая будет выброшена