Java和Android中StringBuffer类的不同行为

问题描述 投票:2回答:2

我正在使用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

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

提前致谢。

java android stringbuffer
2个回答
6
投票

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

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


4
投票

StringBuffer的类定义没有明确定义实现应该增加容量的任何要求。不同的实现可以随意使用它们。

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

© www.soinside.com 2019 - 2024. All rights reserved.