Java和Android中StringBuffer类的不同行为

Dil*_*tel 2 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());
Run Code Online (Sandbox Code Playgroud)

Java输出 -

 default capacity = 16
 increases capacity = 34
 length = 23
Run Code Online (Sandbox Code Playgroud)

Android输出 -

 default capacity = 16
 increases capacity = 26
 length = 23
Run Code Online (Sandbox Code Playgroud)

我无法理解这一点,如果有人知道这一点那么请帮助我.

提前致谢.

Dod*_*ion 6

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

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

  • 严格来说,容量本身不是内部实现细节; 它可以通过使用`new StringBuffer(int capacity)`来设置(API doc甚至声明它默认为16),并且有ensureCapacity().这是实现细节的自动容量增加. (2认同)