zoukankan      html  css  js  c++  java
  • StringBuffer与StringBuilder详解

    刚刚在参加网易实习生在线考试的时候,出了一道选择题谈到了StringBuilder这个类的一些选项,虽然那道题自己做对了,但是也提醒了我应该好好了解一些StringBuffer与StringBuilder。

    先来看看这两个类的类结构图:

    从类的结构图,我们可以看到:

    1)StringBuffer与StringBuilder都实现了相同接口CharSequence,Serializable及继承自相同的类AbstractStringBuilder。

    2)既然它们都继承自AbstractStringBuilder,而这个抽象类提供了StringBufferStringBuilder绝大部分的实现。因此StingBuffer与StringBuilder在功能上完全相同,唯一不同是它们在不同情况下的运行效率不同,具体说是在多线程与单线程下的效率不同。因为StringBuffer所有方法(构造方法除外)签名中都使用 synchronized 限定,也就是所有的方法都是同步的 这我们可以通过查看它们的源码,如下:

    StringBuffer中的replace()方法

    public synchronized StringBuffer replace(int start, int end, String str) {
            super.replace(start, end, str);
            return this;
    }
    

    StirngBuilder中的replace()方法:

    public StringBuilder replace(int start, int end, String str) {
            super.replace(start, end, str);
            return this;
    }
    

    其实java中的这种情况在集合中也存在,如:HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高,,区别在于StringBuffer线性安全的,适合多线程中使用。StringBuilder线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高,这是因为StringBuffer为了达到线程安全的目的在一定程度上会降低程序的性能。

    3)它们都可以通过append()方法来动态的添加它们的长度。



  • 相关阅读:
    聊聊click延迟和点击穿透
    setAttribute的浏览器兼容性(转)
    浅谈JS中的高级函数
    跨域总结
    本地存储小结
    ubuntu下pip的安装和使用
    并发编程艺术-锁类型以及底层原理
    HTTP协议以及HTTP2.0/1.1/1.0区别
    Paxos
    jvm垃圾收集器总结jdk1.7
  • 原文地址:https://www.cnblogs.com/hainange/p/6334057.html
Copyright © 2011-2022 走看看