黑马程序员技术交流社区
标题:
StringBuffer的无参构造函数 -
[打印本页]
作者:
荣天
时间:
2012-5-22 16:50
标题:
StringBuffer的无参构造函数 -
public class buffer {
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:22
capacity:34
length:5
capacity:21
为什么 会有capacity:34?怎么计算的,麻烦说一下原理
作者:
8161776
时间:
2012-5-22 17:32
本帖最后由 杨尧 于 2012-5-22 17:35 编辑
public class buffer {
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());
}
}
复制代码
容量指可用于最新插入的字符的存储量,超过这一容量就需要再次进行分配。
超过的话分配一点,增加的规律是(旧值+1)*2
作者:
陆建平
时间:
2012-5-22 17:43
StringBuffer的capacity() :返回当前StringBuffer对象(字符串缓冲区)的总空间,而非字符号串的长度。所以说capacity:34不是计算出来的。
作者:
张晨
时间:
2012-5-22 18:10
StringBuffer 初始能容纳16个字符
public StringBuffer() {
super(16);
}
复制代码
若超过长度,会自动调用如下方法:
*/
void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2;
if (newCapacity - minimumCapacity < 0)
newCapacity = minimumCapacity;
if (newCapacity < 0) {
if (minimumCapacity < 0) // overflow
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE;
}
value = Arrays.copyOf(value, newCapacity);
}
复制代码
也就是说他的新长度=旧长度×2+2;
测试一下:
package test;
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println(sb.capacity() );
sb.append("01234567890123456790");
System.out.println(sb.capacity() );
}
}
复制代码
output:
16
34
复制代码
作者:
荣天
时间:
2012-5-22 20:23
{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2