stringbuffer capacity()的疑问

stringbuffer capacity()的疑问

public class Example9_11 {
	public static void main(String args[]) {
		StringBuffer str = new StringBuffer();
		str.append("大家好");
		System.out.println("str:" + str);
		System.out.println("length:" + str.length());
		System.out.println("capacity:" + str.capacity());
		str.append("我们大家都很愿意学习Java");
		System.out.println("str:" + str);
		System.out.println("length:" + str.length());
		System.out.println("capacity:" + str.capacity());
		StringBuffer sb = new StringBuffer("Hello");
		System.out.println("length:" + sb.length());
		System.out.println("capacity:" + sb.capacity());
	}
}


str:大家好
length:3
capacity:16
str:大家好我们大家都很愿意学习Java
length:17
capacity:34//疑点 16 * 2 + 2
length:5
capacity:21


capacity()返回StringBuffer的容量, length()返回StringBuffer里放着的字符串的长度。




StringBuffer在内部维护一个字符数组,当你使用缺省的构造函数来创建StringBuffer对象的时候, StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。当StringBuffer达到最大容 量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。


如果你使用缺省值,初始化之后接着往里面追加字符,在你追加到第17(原文是16,其实是错误的,因为在追加到第16个字符的时候,容量不会发生变化,很抱歉,以后会更严谨一些^+^)个字符的时候它会将容量增加 到34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。无论何事只要StringBuffer 到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。所以给 StringBuffer设置一个合理的初始化容量值,会提升程序的性能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值