黑马程序员技术交流社区
标题:
关于StringBuffer的疑问
[打印本页]
作者:
张权
时间:
2012-12-31 20:55
标题:
关于StringBuffer的疑问
本帖最后由 张权 于 2013-1-1 00:01 编辑
StringBuffer s = new StringBuffer();//构造一个缓冲区,默认16个字符的容量.
s.append("hahahahahahaahahahahahahahahahaaha");//调用append方法追加字符串到缓冲区
问题:默认的不是只有16个字符的容量么?这个可以理解为StringBuffer的容量是可变的吗?
如果是这样,那么 StringBuffer (int capacity)这个方法岂不是显得没用了吗?因为这个方法就是构造一个不带字符,但具有指定初始容量的字符串去啊? 我不指定初始容量它自己也可以根据我追加的字符串而改变容量,要这个方法还有什么用呢
作者:
马志军
时间:
2012-12-31 21:05
本帖最后由 马志军 于 2012-12-31 21:08 编辑
是可变的,StringBuffer (int capacity)只是刚开始指定一个初始大小的,如果你添加的没超过容量,定义小点不省空间嘛。
如果超出了,那就自动增加容量
API里原话:每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。
作者:
程宏志
时间:
2012-12-31 21:09
你看Api怎么就看一部分呢?StringBuffer默认的的是16个字符没错,但是有几句话你的记住,它是可变序列的
其实就是相当于一个容器。
作者:
冉世友
时间:
2012-12-31 21:59
这相当于一种缓冲机制,用来节约内存空间的嘛。
当我们添加的内容不超过初始定义大小时,就不用
自动增加容量了,反之就自动增加。
作者:
嘿嘿小学徒
时间:
2012-12-31 23:10
StringBuffer的capacity可以改变,
StringBuffer (int capacity)只是个初始大小的,如果你新插入字符串超过这个空间,更大的空间将会重新分配给它。
作者:
王玮
时间:
2012-12-31 23:28
本帖最后由 王玮 于 2012-12-31 23:32 编辑
public synchronized StringBuffer append(int i) {
super.append(i);
return this;
}
===================================
public AbstractStringBuilder append(char c) {
int newCount = count + 1;
if (newCount > value.length)
expandCapacity(newCount);
value[count++] = c;
return this;
}
/**
* This implements the expansion semantics of ensureCapacity with no
* size check or synchronization.
*/
void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
value = Arrays.copyOf(value, newCapacity);
}
复制代码
有初始容量 (int capacity) ,先分配你初始的 ,你不分配就自己默认分配,当不够的时候 再在自动的分,此举节约内存呗
~
作者:
张权
时间:
2012-12-31 23:57
马志军 发表于 2012-12-31 21:05
是可变的,StringBuffer (int capacity)只是刚开始指定一个初始大小的,如果你添加的没超过容量,定义小点 ...
哦,知道了!!!
作者:
何伟
时间:
2013-1-1 00:31
StringBuffer(int capacity)这是个构造方法
用来创建缓冲区,容量为capacity。
使用这个构造器,可以自己指定容量!
扩充容量会影响效率!
浪费容量就是影响内存。
以时间换空间。
以空间换时间。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2