Из API:
У каждого строителя строк есть емкость.Пока длина символьной последовательности, содержащейся в построителе строк, не превышает емкости, нет необходимости выделять новый внутренний буфер.Если внутренний буфер переполняется, он автоматически увеличивается.
Когда вы добавляете что-то, есть проверка, чтобы убедиться, что обновленный StringBuilder не превысил свою емкость, и если это так, тоРазмер внутреннего хранилища StringBuilder изменяется:
int len = str.length();
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
Когда к нему добавляются данные, размер которых превышает его емкость, он изменяется по следующей формуле:
void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
value = Arrays.copyOf(value, newCapacity);
}
См. src.zip
файл, который поставляется с JDK для получения дополнительной информации.(Выше фрагменты взяты из 1.6 JDK)