在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()方法返回的值时,条件是什么?

最佳答案

好吧,trimToSize Javadoc的开头说


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


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

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

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

10-07 22:37