Из документов StringBuffer :
Каждый строковый буфер имеет емкость.Пока длина символьной последовательности, содержащейся в строковом буфере, не превышает емкость, нет необходимости выделять новый массив внутреннего буфера.Если внутренний буфер переполняется, он автоматически увеличивается.
Насколько я понимаю, это означает, что если мы используем метод append
для строкового буфера и длина данной строки превышаетемкость строкового буфера, JVM автоматически выделит больший объем памяти для нового строкового буфера и сохранит старый строковый буфер вместе с заданной строкой.Однако в этом случае как старый строковый буфер, так и новый строковый буфер могут иметь одну и ту же ссылку, как указано ниже.Длина добавляемой строки превышает 16 байтов, поэтому это заставит JVM выделить новую память для буфера новой строки.
public class test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("initial value");
System.out.println("before: the reference is " + System.identityHashCode(sb));
sb.append(" - this message is append through sb and this message is longer than 16 bytes");
System.out.println("after: the reference is " + System.identityHashCode(sb));
}
}
вывод
before: the reference is 511833308
after: the reference is 511833308