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()方法来动态的添加它们的长度。



  • 相关阅读:
    红黑树
    二叉搜索树
    散列表
    基本数据结构
    顺序统计量
    RabbitMQ一些实用方法
    (转)elasticsearch连接不到head插件解决方案
    (转)如何优雅的使用rabbit mq
    (转)elasticsearch6.0版本安装head插件
    Rabbit MQ一些参数解释
  • 原文地址:https://www.cnblogs.com/hainange/p/6334057.html
Copyright © 2011-2022 走看看