当trimToSize()方法不影响Java中StringBuffer类的Capacity()方法返回的值时,情况如何?

时间:2019-01-20 08:07:38

标签: java string stringbuilder stringbuffer capacity

在trimToSize()方法的规范中,这样写:

Calling this method may, but is not required to, 
affect the value returned by a subsequent call to the {@link #capacity()} method.

trimToSize()方法不影响Java中StringBuffer类的Capacity()方法返回的值是什么条件?

1 个答案:

答案 0 :(得分:2)

好吧,trimToSize Javadoc的开头说

  

尝试,以减少用于字符序列的存储空间。如果缓冲区大于保留其当前字符序列所需的缓冲区,则可以调整其大小以提高空间利用率

不需要减少存储量,也可能无法减少存储量(即使有可能减少存储量,实现也可以决定不这样做会更有利。减少存储空间)。如果减少了存储量,则随后调用capacity()返回的结果将改变。

也就是说,我在AbstractStringBuilder中看到的实现总是在可能的情况下(即,当并非所有后备数组字符都被占用时)减少存储空间:

public void trimToSize() {
    if (count < value.length) {
        value = Arrays.copyOf(value, count);
    }
}