#java #stringbuffer
#java #stringbuffer
Вопрос:
Когда я запускаю этот код:
StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " name.length() ", capacity: " name.capacity());
это дает вывод:
Длина: 17, емкость: 33
Очевидная длина связана с количеством символов в строке, но я не уверен, какая емкость? Это количество символов, которое StringBuffer может удерживать до перераспределения пространства?
Ответ №1:
Смотрите: JavaSE 6 java.lang.Емкость буфера строк()
Но ваше предположение верно:
Емкость — это объем памяти, доступный для вновь вставленных символов, за пределами которого произойдет выделение
Ответ №2:
Это размер внутреннего буфера. Как говорит Javadoc:
У каждого строкового буфера есть емкость. Пока длина последовательности символов, содержащейся в строковом буфере, не превышает емкость, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически увеличивается.
Ответ №3:
Да, вы правы, смотрите JavaDoc для получения дополнительной информации:
Пока длина последовательности символов, содержащейся в строковом буфере, не превышает емкость, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически увеличивается.
Ответ №4:
Внутренне StringBuffer
использует char
массив для хранения символов. Емкость — это начальный размер этого char
массива.
Более подробную информацию можно найти наhttp://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
Ответ №5:
Из http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#capacity()
public int capacity()
Возвращает текущую емкость. Емкость — это объем памяти, доступный для вновь вставленных символов, за пределами которого произойдет выделение.
Также из того же документа
Начиная с выпуска JDK 5, этот класс был дополнен эквивалентным классом, предназначенным для использования одним потоком, StringBuilder. Класс StringBuilder обычно следует использовать предпочтительнее этого, поскольку он поддерживает все те же операции, но он быстрее, поскольку не выполняет синхронизацию.
Ответ №6:
Да, это именно так. Вы можете думать о StringBuffer
том, что в этом отношении вы немного похожи на Vector<char>
(за исключением того, что, очевидно, вы не можете использовать char
в качестве аргумента типа в Java …)
Ответ №7:
У каждого строкового буфера есть емкость. Пока длина последовательности символов, содержащейся в строковом буфере, не превышает емкость, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически увеличивается.
От:http://download.oracle.com/javase/1.4.2/docs/api/java/lang/StringBuffer.html
Ответ №8:
StringBuffer имеет символ[], в котором хранятся строки, которые вы к нему добавляете. Объем памяти, выделенный в данный момент для этого буфера, является емкостью. Используемая в данный момент величина — это длина.
Ответ №9:
Взято из официальной документации J2SE
Емкость — это объем памяти, доступный для вновь вставленных символов, за пределами которого произойдет выделение.
Обычно его длина 16, что является минимальным выделением, но как только количество символов, т.Е. Его размер, превышает выделенный, StringBuffer также увеличивает свой размер (на фиксированную величину), но на сколько будет назначена сумма, мы не можем ее вычислить.
Ответ №10:
«У каждого строкового буфера есть емкость. Пока длина последовательности символов, содержащейся в строковом буфере, не превышает емкость, нет необходимости выделять новый внутренний буферный массив. Если внутренний буфер переполняется, он автоматически увеличивается.»
http://download.oracle.com/javase/1.3/docs/api/java/lang/StringBuffer.html -смотрите capacity() и ensurecapacity()
Ответ №11:
Емкость — это объем памяти, доступный для вновь вставленных символов.Это отличается от length().Длина() возвращает общее количество символов, а емкость возвращает значение 16 по умолчанию, если количество символов меньше 16.Но если количество символов больше 16, емкость равна количеству символов 16. В этом случае количество символов = 17, ТАКИМ образом, емкость = 17 16 = 33
Ответ №12:
Иван, просто прочитай документацию для capacity() — это прямой ответ на твой вопрос…
Комментарии:
1. Я уже покрасил его, и там написано «емкость — это объем хранилища», но я не был уверен, какова единица измерения для этого объема. Как некоторые утверждали, эта единица измерения — «количество символов». Спасибо.
2. Цитата: Возвращает текущую емкость. Емкость — это объем памяти, доступный для вновь вставленных символов, за пределами которого произойдет выделение .
Ответ №13:
Начальная емкость класса StringBuffer / StringBuilder равна 16. В первый раз, если длина вашей строки становится > 16. Емкость класса StringBuffer / StringBuilder увеличивается до 34, т.е. [(16*2) 2]
Но когда длина вашей строки становится > 34, емкость класса StringBuffer / StringBuilder становится точно равной текущей длине строки.
Ответ №14:
Уже слишком поздно для ответа, но надеюсь, что это может кому-то помочь.
Когда мы используем конструктор StringBuffer по умолчанию, тогда выделяемая емкость равна 16
StringBuffer name = new StringBuffer();
System.out.println("capacity: " name.capacity()); /*Output - 16*/
Но в случае конструктора строкового аргумента StringBuffer вычисление емкости выглядит следующим образом
StringBuffer sb = new StringBuffer(String x);
Емкость = емкость буфера строк по умолчанию x.length()
Решение:
StringBuffer name = new StringBuffer("stackoverflow.com");
System.out.println("Length: " name.length() ", capacity: " name.capacity());
Вычисление емкости: емкость = 16 17