Различное поведение класса StringBuffer в Java и Android
Я работал над Stringbuffer для получения текущей емкости буфера и обнаружил очень странное поведение.
Я запускаю ниже кода в Java и Android.
По многим ресурсам я нашел эту формулу для увеличения буферной емкости
Если количество символов увеличивается от его текущей емкости, оно увеличивает емкость на (oldcapacity*2)+2. Например, если ваша текущая емкость равна 16, она будет (16*2)+2=34.
StringBuffer sb = new StringBuffer();
System.out.println(sb.capacity());
sb.append("Hello Hello Hello Hello");
System.out.println(sb.capacity());
System.out.println(sb.length());
Выход Java--
default capacity = 16
increases capacity = 34
length = 23
Android выход -
default capacity = 16
increases capacity = 26
length = 23
Я не могу этого понять, если кто-то знает об этом, пожалуйста, помогите мне.
Заранее спасибо.
2 ответа
Способ емкость StringBuffer
увеличивается, это внутренняя деталь реализации. Его API позволяет вам взглянуть на способность вашего кода принимать решения, связанные с производительностью. Документация / контракт для этого класса не дает никаких гарантий относительно того, как именно его емкость автоматически увеличивается. Поэтому им разрешено различаться на разных платформах. То, что должно быть одинаковым на обеих платформах, это длина строки StringBuffer
,
Кстати, вы должны использовать StringBuilder
вместо этого, если вы не используете тот же StringBuffer
Объект в нескольких потоках.
Определение класса для StringBuffer
не содержит четких требований о том, насколько реализация должна увеличить пропускную способность. Различные реализации могут делать это по своему усмотрению.
Учитывая ограничение памяти на мобильных устройствах, будет иметь смысл, что Android не столь либерален с объемом дополнительного пространства, которое он выделяет для буфера, когда ему нужно увеличить его.