美文网首页Java
StringBuffer和StringBuilder

StringBuffer和StringBuilder

作者: 雨夏_ | 来源:发表于2019-01-20 17:06 被阅读95次

    1.StringBuffer和StringBuilder


    从类图中我们可以发现:
    String和StringBuffer(或StringBuilder)并没有直接的继承关系
    StringBuffer和StringBuilder都是继承自AbstractStringBuilder,实现了Serializable接口,可以序列化。
    AbstractStringBuilder实现了Appendable和CharSequence接口,提供了append、charAt、subSequence等操作。

    2.StringBuffer比StringBuilder成员变量


    StringBuffer和StringBuilder成员变量基本上都是继承自AbstractStringBuilder的,但是多了一个序列化ID,StringBuffer还有一个toStringCache数组,用来缓存上一次toString的值,如果进行了修改方法,将会使这个值置空。

    3.insert、replace、delete、append等

    这些操作基本上都是通过System类的arraycopy方法来实现。System.arraycopy是一个native方法,在一定程度上提高了效率。
    详细怎么实现的就不多介绍,比较简单。

    4.String、StringBuffer和StringBuilder

    1. StringBuffer中的大部分方法都是用synchronized方法进行了修饰,所以StringBuffer是线程安全,但是使用synchronized,每次都会要进行加锁和释放锁的操作,会有额外的开销,所以性能上StringBuffer会比StringBuilder要低。

    2. String类是一个不可变类,对String类进行修改每次都会返回一个新的对象。所以String类每次调用修改的方法需要重新进行引用。StringBuffer和StringBuilder就是直接在对象本身进行操作,不会产生新的对象,所以性能上会由于String。

    3. 由于String对象每次都会新生成一个对象,所以在频繁的做字符串拼接的时候,用String类会产生大量的字符串,很容导致GC,所以做字符串拼接建议使用StringBuffer或者StringBuilder

      小结:字符串修改时的速度:String<StringBuffer<StringBuilder

    相关文章

      网友评论

        本文标题:StringBuffer和StringBuilder

        本文链接:https://www.haomeiwen.com/subject/jmoxjqtx.html