在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);
}
}