StringBuilder和StringBuffer的区别

由于String对象是不可变对象,因此,在需要对字符串进行修改操作时(如字符串连接,替换),String对象总是会生成新的对象,所以,其性能相对较差。为此,JDK专门提供了用于创建和修改字符串的工具,这就是StringBuilder和StringBuffer类。
StringBuilder和StringBuffer是一对孪生兄弟,它们都实现了AbstractStringBuilder抽象类,拥有几乎相同的对外接口,两者的最大不同在于StringBuffer对几乎所有的方法都做了同步,而StringBuilder并没有做任何同步。
由于方法同步需要消耗一定的系统资源,因此,StringBuilder的效率也好于StringBuffer。但是,在多线程中,StringBuilder无法保证线程安全,不能使用。

long sbBegin = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer();
//      StringBuilder sb = new StringBuilder();
        for(int i = 0; i < 1000000; i++)
        {
            sb.append(i);
        }
        long sbOver = System.currentTimeMillis();
        System.out.println(sbOver-sbBegin);

在笔者的计算机中,StringBuffer耗时111ms,StringBuilder耗时100ms。可见,非同步的StringBuilder拥有更高的效率。
在无需考虑线程安全的情况下,可以使用性能相对较好的StringBuilder,但若系统有线程安全要求,只能选择StringBuffer。
总结来说,
1.如果要操作少量的数据用String。
2.单线程操作字符串缓冲区下操作大量数据用StringBuilder。
3.多线程操作字符串缓冲区下操作大量数据用StringBuffer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值