黑马程序员技术交流社区
标题:
关于StringBuffer的容量问题?
[打印本页]
作者:
刘辉
时间:
2013-3-15 21:25
标题:
关于StringBuffer的容量问题?
本帖最后由 黄玉昆 于 2013-3-16 13:55 编辑
2. public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
StringBuffer sb2 = new StringBuffer("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2:"+sb2.length());
System.out.println("sb2:"+sb2.capacity());
System.out.println("******************************");
sb.append("helloworld");
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
System.out.println("******************************");
sb.append("helloworld");
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
sb.append("helloworld");
sb.append("helloworld");
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
}
}
打印的结果是: sb:
sb:0
sb:16
sb2:hello
sb2:5
sb2:21
******************************
sb:helloworld
sb:10
sb:16
******************************
sb:helloworldhelloworld
sb:20
sb:34
sb:helloworldhelloworldhelloworldhelloworld
sb:40
sb:70
疑问:sb:34那里本来应该得到的结果不应该是默认容量加上字符串的长度16+10+10=36么?怎么变成34了?最后的70也是,为什么?
作者:
沈子豪
时间:
2013-3-15 21:33
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
StringBuffer sb2 = new StringBuffer("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2:"+sb2.length());
System.out.println("sb2:"+sb2.capacity());
System.out.println("******************************");
sb.append("helloworld");
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
System.out.println("******************************");
sb.append("helloworld");
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
sb.append("hello");/
sb.append("helloworld");
System.out.println("sb:" + sb);
System.out.println("sb:" + sb.length());
System.out.println("sb:" + sb.capacity());
}
}
这里面是固定的只要添加,如果字符串长度超过容量,则添加后的字符串的容量都会变成2(以前容量+1),以保证容量是始终增加的.34=2*(16+1),70=2*(34+2).
作者:
黑马李超
时间:
2013-3-15 21:37
可以查看下API中 StringBuffer的ensureCapacity方法
如果当前容量小于 minimumCapacity 参数,则可分配一个具有更大容量的新的内部数组。新容量的大小应大于:
minimumCapacity 参数。
旧容量的两倍加 2。
作者:
朱盛文
时间:
2013-3-15 22:02
本帖最后由 朱盛文 于 2013-3-15 23:56 编辑
[code]public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println
作者:
黄玉昆
时间:
2013-3-15 22:21
楼主,你写这么多的打印语句,不累吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2