Java和Android中StringBuffer类的不同行为

Java和Android中StringBuffer类的不同行为,java,android,stringbuffer,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(

我正在使用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
 default capacity = 16
 increases capacity = 26
 length = 23
Android输出--

 default capacity = 16
 increases capacity = 34
 length = 23
 default capacity = 16
 increases capacity = 26
 length = 23
我不明白,如果有人知道,请帮助我


提前谢谢

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


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

对于
StringBuffer
的类定义没有明确定义实现应将容量增加多少的任何要求。不同的实现可以随意执行


考虑到移动设备的内存限制,Android在需要增加缓冲区时,对其分配给缓冲区的额外空间量没有那么宽松是有道理的。

这有什么“非常奇怪”的?他们使用不同的默认值…**他们使用不同的默认值**意味着什么?在Java和android中,默认值是不同的。严格地说,容量本身并不是一个内部实现细节;它可以通过使用
新的StringBuffer(int-capacity)
进行设置(API文档甚至声明它默认为16),还有ensureCapacity()。实现细节是自动增加容量。DodgyCodeException表示此公式(oldcapacity*2)+2不适用于所有平台?@Dileepattel正确。API的实现者根据什么最适合他们的特定实现来做出决定:这是速度和内存使用之间的平衡。