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