首页 > 试题广场 >

说一说StringBuffer和StringBuilder的

[问答题]

说一说StringBuffer和StringBuilder的区别

推荐

得分点

​ 线程安全

标准回答

​ StringBuffer和StringBuilder都代表可变的字符串对象,它们有共同的父类 AbstractStringBuilder,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder性能略高。如果是在单线程下操作大量数据,应优先使用StringBuilder类。如果是在多线程下操作大量数据,应优先使用StringBuilder类。

加分回答

​ 我们可以通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法改变这个字符串对象的序列。如果通过StringBuffer生成了最终想要的字符串,那我们就可以调用其toString()方法将其转化为一个String对象。StringBuilder是JDK1.5新增的类,提供的API与StringBuffer类似。

延伸阅读

​ 为什么StringBuffer线程安全,我们可以通过源码来查看一下。

​ StringBuffer部分源码:

     @Override
    public synchronized StringBuffer append(char c) {
        toStringCache = null;
        super.append(c);
        return this;
    }

​ StringBuilder部分源码:

     @Override
    public StringBuilder append(char c) {
        super.append(c);
        return this;
    }

​ 我们看到,StringBuffer很多方法都是synchronized 修饰的所以做到了线程安全,而StringBuilder并没有兼顾到线程安全的问题,所以多线程环境应避免使用StringBuilder哦。

编辑于 2021-09-15 10:27:15 回复(0)
Stringbuffer和Stringbuild都是可序列化的,可用的方法也是一致的
Stringbuffer是线程安全的
stringbuilder 效率最高,但是不存在线程安全
发表于 2021-12-24 14:53:00 回复(0)