admin管理员组文章数量:1611972
扩容公式:扩容后的容量为前一个容量的2倍+2(字符序列的长度不超过此范围的情况下才适用);
第一种,初始字符序列作为参数时:
那么对象实体的初始容量为参数的字符序列的长度再加16;
代码及运行结果如下:
它接下来再追加字符序列的扩容问题和接下来的情况是一样的,往下看就可以了。
第二种StringBuffer构造方法无参时:
对象实体的初始容量为16(相当于原字符序列长度为0+16)。
追加字符序列后字符序列的长度不超过它原来的容量的大小时,不会扩容;
追加字符序列后字符序列的长度超过了它的原容量大小,但不超过扩容公式计算结果的容量大小时,容量为扩容公式计算出的容量大小;
代码及运行结果如下:
追加字符序列后字符序列的长度超过了原容量的大小,且超过了扩容公式计算出的容量大小,那么对象实体的容量的大小就直接是追加后字符序列的长度(扩容公式不适用了!!!)。
代码及运行结果如下:
但第一次调用append()方法时,当字符序列的长度不超过16时,它的初始容量是16;当字符序列长度是17时,它的容量是34;而超过34时,它的容量就直接为字符序列的长度了(扩容公式不适用了)。
分析一下:首先还没调用append()方法时,它的初始容量为16,然后第一次调用append()追加了字符序列:若添加的长度在16以内(原容量范围内),不会扩容;若添加的长度在16~34以内(原容量~扩容公式计算的范围),那么容量的大小为扩容公式计算出的容量大小;若添加的长度大于34,那么已经超过了扩容公式的计算范围,这时的容量大小就直接为字符序列的长度。
第一次调用append()方法的三种情况代码及运行结果如下:
------------分割线一条------------
------------分割线一条------------
第三种trimToSize()减容:
trimToSize()方法是将容量减小为字符序列的长度。那么将此方法放到创建完对象后的第一条语句,那么此时的对象实体容量为0。接下来第一次调用append()方法追加字符序列时,容量大小为字符序列的长度。而后面再继续调用append()方法时,与前面分析的情况相同。
代码及运行结果如下:
这个问题的情况稍微有点多,但其实没那么重要,如果不想让StringBuffer对象的容量占用内存空间,那只要每次调用append()方法追加完字符序列后再调用trimToSize()方法,就可以把容量减小为你的字符序列长度了。
本文标签: 容量StringBufferCapacity
版权声明:本文标题:StringBuffer的容量capacity()问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728619763a1166198.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论