Странное поведение StringBuffer.append():
javatpoint указывает:
If the number of the character increases from its current capacity, it > increases the capacity by (oldcapacity*2)+2.
Это можно продемонстрировать с помощью следующего кода:
class test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("abcdef"); // 16;
System.out.println(sb.capacity());
sb.append("1234561711"); // 34
System.out.println(sb.capacity()); // 34
}
}
Но это показывает странное поведение в следующем коде:
class test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("abcdef"); // 16;
System.out.println(sb.capacity());
sb.append("12345617111111111111111111111111111111"); // 44 total 44 character in sb, so capacity should be 70 as it goes from 16, 34, 70, 142 etc.
System.out.println(sb.capacity()); // 34
}
}
если мы используем два добавления с указанными выше символами, емкость будет 70!
Так что, думаю, ломается только один лимит в одном append()
Я бы рекомендовал использовать канонический источник документации, например. Javadoc.
Емкость, очевидно, не может быть 34 во втором случае, если общая длина равна 44. ideone.com/Ob76lJ




Логика StringBufferensureCapacity изложена в Javadoc:
void java.lang.AbstractStringBuilder.ensureCapacity(int minimumCapacity)
Ensures that the capacity is at least equal to the specified minimum.If the current capacity is less than the argument, then a new internal array is allocated with greater capacity. The new capacity is the larger of:
• The minimumCapacity argument.
• Twice the old capacity, plus 2.
Во втором фрагменте 44 (это минимально необходимая емкость, поскольку после второго append в StringBuffer будет 44 символа) больше, чем в два раза по сравнению со старой емкостью, плюс 2 (что равно 34). Следовательно, новая вместимость равна 44.
Не понятно, о чем вы спрашиваете. У вас есть вопрос?