码迷,mamicode.com
首页 > 其他好文 > 详细

String、StringBuilder和StringBuffer

时间:2015-06-01 18:36:10      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

  好吧,这算一个简单而又常见的问题了,但还是写一写,因为再高深一点我也感觉力不从心。

  String是一个不可变的对象,也即任何意图修改某个String对象的行为都不得不变成新建一个利用修改的内容创建新的对象,所以经常修改String会带来大量的垃圾,增加GC的负担,致使程序性能变差,java引入StringBuffer类就是为了能够减少多余对象的创建。

String s1 = "mk",s2="ko",s3="jk";
String str = s1 + s2 + s3;
StringBuffer strB = new StringBuffer().append(s1).append(s2).append(s3);

当连接更多String时,StringBuffer相比于String的性能优势会更加明显。

  StringBuffer的设计是线程安全的,一下是一段StringBuffer的源码

 public synchronized StringBuffer append(double d) {
        super.append(d);
        return this;
    }

    /**
     * @throws StringIndexOutOfBoundsException {@inheritDoc}
     * @since      1.2
     */
    public synchronized StringBuffer delete(int start, int end) {
        super.delete(start, end);
        return this;
    }

    /**
     * @throws StringIndexOutOfBoundsException {@inheritDoc}
     * @since      1.2
     */
    public synchronized StringBuffer deleteCharAt(int index) {
        super.deleteCharAt(index);
        return this;
    }

    /**
     * @throws StringIndexOutOfBoundsException {@inheritDoc}
     * @since      1.2
     */
    public synchronized StringBuffer replace(int start, int end, String str) {
        super.replace(start, end, str);
        return this;
    }

大部分的方法都是加锁的以保证线程安全,但大部分Java程序都是在单线程状态的,StringBuffer为线程安全所付出的巨大开销,性能也会受到影响,StringBuilder(无需保证线程安全)相比之下就显得更有优势了,所以在单线程环境下应尽量使用StringBuilder。

String、StringBuilder和StringBuffer

标签:

原文地址:http://www.cnblogs.com/yigeboke/p/4544367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!