在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()方法返回的值是什么条件?
答案 0 :(得分:2)
好吧,trimToSize
Javadoc的开头说
尝试,以减少用于字符序列的存储空间。如果缓冲区大于保留其当前字符序列所需的缓冲区,则可以调整其大小以提高空间利用率
不需要减少存储量,也可能无法减少存储量(即使有可能减少存储量,实现也可以决定不这样做会更有利。减少存储空间)。如果减少了存储量,则随后调用capacity()
返回的结果将改变。
也就是说,我在AbstractStringBuilder
中看到的实现总是在可能的情况下(即,当并非所有后备数组字符都被占用时)减少存储空间:
public void trimToSize() {
if (count < value.length) {
value = Arrays.copyOf(value, count);
}
}