A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘辉 中级黑马   /  2013-3-15 21:25  /  1188 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 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-16 08:22

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
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).

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
可以查看下API中 StringBuffer的ensureCapacity方法
如果当前容量小于 minimumCapacity 参数,则可分配一个具有更大容量的新的内部数组。新容量的大小应大于:
minimumCapacity 参数。
旧容量的两倍加 2。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 朱盛文 于 2013-3-15 23:56 编辑

[code]public class StringBufferDemo {
        public static void main(String[] args) {
        
                StringBuffer sb = new StringBuffer();
                System.out.println

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼主,你写这么多的打印语句,不累吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马