我正在使用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
我无法理解这一点,如果有人知道这一点那么请帮助我。
先谢谢。
答案 0 :(得分:6)
StringBuffer
的容量增加的方式是内部实现细节。它的API允许您查看允许代码做出与性能相关的决策的能力。此类的文档/合同无法保证其容量如何自动增加。因此允许它们在不同平台上有所不同。两个平台上必须相同的是StringBuffer
的字符串长度。
顺便说一句,如果您没有在多个线程中使用相同的StringBuilder
对象,则应使用StringBuffer
。
答案 1 :(得分:4)
StringBuffer
的类定义没有明确定义实现应该增加容量的任何要求。不同的实现可以自由地执行,但是他们喜欢。
考虑到移动设备的内存限制,当它需要增加缓冲区时,分配给缓冲区的额外空间量就不那么自然了。