Java和Android中StringBuffer类的不同行为

时间:2017-08-22 12:34:30

标签: java android stringbuffer

我正在使用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 个答案:

答案 0 :(得分:6)

StringBuffer的容量增加的方式是内部实现细节。它的API允许您查看允许代码做出与性能相关的决策的能力。此类的文档/合同无法保证其容量如何自动增加。因此允许它们在不同平台上有所不同。两个平台上必须相同的是StringBuffer的字符串长度。

顺便说一句,如果您没有在多个线程中使用相同的StringBuilder对象,则应使用StringBuffer

答案 1 :(得分:4)

StringBuffer的类定义没有明确定义实现应该增加容量的任何要求。不同的实现可以自由地执行,但是他们喜欢。

考虑到移动设备的内存限制,当它需要增加缓冲区时,分配给缓冲区的额外空间量就不那么自然了。