黑马程序员技术交流社区

标题: StringBuffer容量问题~ [打印本页]

作者: 726477179    时间: 2016-8-11 14:01
标题: StringBuffer容量问题~
StringBuffer sb3 = new StringBuffer("heima");
System.out.println(sb3.capacity());                        //字符串的length + 初始容量
为什么这里的长度会是21不是16呢?为什么不占用初始容量?什么时候才占用初始容量 不是说好的内存未溢出就不会扩充吗?
作者: paksung    时间: 2016-8-11 15:10
如图所示。。。。

QQ图片20160811150941.png (59.03 KB, 下载次数: 75)

QQ图片20160811150941.png

作者: 726477179    时间: 2016-8-11 17:19
paksung 发表于 2016-8-11 15:10
如图所示。。。。

那意思是说初始的16字节空间是永远无法使用的的是吗?
作者: 小红花    时间: 2016-8-11 19:11
好好理解下初始化长度的含义,初始化长度的含义:字符串缓存区的最初的长度是(默认值得长度16+传入参数的长度);不是说没有用到默认值。
作者: 羿无双    时间: 2016-8-11 21:38
初始化的时候传入参数的话,容量会编程16+传入长度;
初始化的时候不传入参数的话,下面的字符串会占用初始容量;
作者: 695212308    时间: 2016-8-11 22:10
StringBuffer buf = new StringBuffer();
这句话表示初始化了一个空的初始容量为16个字符的空间大小。

StringBuffer buf = new StringBuffer("heima");
表示创建了"heima"字符串大小的空的字符空间,也就是5。

StringBuffer内部是通过创建字符数组保存数据的,假如当前的容量小于实际存储的容量,它会以2倍容量的大小,重新构造新的字符数组,然后将以前的内容拷贝到新的字符数组中。 假如我们知道了需要存储数据的大小,直接指定开辟的空间,那样可以减少内部数组创建的次数。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2