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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 吴亨 于 2012-2-16 09:09 编辑

   求高手指点。

评分

参与人数 1技术分 +1 收起 理由
技术测试刘老师 + 1 问的好

查看全部评分

5 个回复

倒序浏览
这个是执行效率。
public class Test10
{
        public static void main(String[] args)
        {
                StringBuffer strBuf = new StringBuffer();
               
                String str = "hello";
                int times = 1500000;
               
                long beginTime = System.currentTimeMillis();
               
                for(int i = 0; i < times; i++)
                {
                        strBuf.append(str);
                }
               
                System.out.println("StringBuffer耗时:" + (System.currentTimeMillis() - beginTime));
               
                System.out.println("========================================");
               
                StringBuilder strBud = new StringBuilder();
               
                beginTime = System.currentTimeMillis();
               
                for(int i = 0; i < times; i++)
                {
                        strBud.append(str);
                }
               
                System.out.println("StringBuilder耗时:" + (System.currentTimeMillis() - beginTime));
        }
}

StringBuffer耗时:265
========================================
StringBuilder耗时:156

原因就是StringBuffer要进行同步操作,这样就大大增加了开销。
StringBuilder没有同步,相对StiringBuilder要高效很多。

随便提醒一下,加入 String str = "";要是进行str += "hello";执行那么多次的话,会消耗掉比StringBuffer上万倍的耗时。所以以后进行字符串拼接啊插入啊增加啊最好先选择
StringBuilder,要是在多线程多就要用StringBuffer。千万别用直接的字符串 += 来拼接字符串了。

你可以进行测试,就是刚才我说的让str执行+=操作,最后计算它们的执行时间你就明白了

评分

参与人数 1技术分 +3 收起 理由
技术测试刘老师 + 3 回答的很详细,并且是沙发3分啊.

查看全部评分

回复 使用道具 举报
StringBuilder是对字符串操作的,不支持并发操作同一个StringBuilderr对象,
StringBuffer内部实际上也是一个StringBuilder,只是把StringBuffer 的每一个方法前加上了synchronized ,比如
StringBuilder sb=new StringBuilder();
public synchronized  StringBuffer append(String str)
{  
     sb.append(str);}
回复 使用道具 举报
StringBuilder是非同步的,效率比较高,这个类在jdk1.5的版本时出来的。StringBuffer是同步的,效率比较低,这个类在jdk1.0的版本就出来了。关于同步的问题,如果不知道,那要到你学习多线程的时候才能知道
回复 使用道具 举报
本帖最后由 许涛 于 2012-2-15 23:34 编辑

记得老师上课有讲过jdk升级无非是三个方面:安全、效率、书写
jdk1.5之后出现的StringBuilder则是对效率方面的提升,StringBuilder比StringBuffer高效。

总的来说就是StringBuilder效率比较高,单线程一般用StringBuilder,但是它用于多个线程
是不安全的。而StringBuffer的特点是低效,但是线程同步,较安全
回复 使用道具 举报
谢谢,懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马