Из API:
Каждый построитель строк имеет емкость. Пока длина символьной последовательности, содержащейся в построителе строк, не превышает емкость, нет необходимости выделять новый внутренний буфер. Если внутренний буфер переполняется, он автоматически становится больше.
blockquote>Всякий раз, когда вы добавляете что-то, есть проверка, чтобы убедиться, что обновленный 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)