说一说StringBuffer和StringBuilder的区别
线程安全
标准回答
StringBuffer和StringBuilder都代表可变的字符串对象,它们有共同的父类 AbstractStringBuilder,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder性能略高。如果是在单线程下操作大量数据,应优先使用StringBuilder类。如果是在多线程下操作大量数据,应优先使用StringBuilder类。
AbstractStringBuilder
加分回答
我们可以通过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哦。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
得分点
线程安全
标准回答
StringBuffer和StringBuilder都代表可变的字符串对象,它们有共同的父类
AbstractStringBuilder
,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder性能略高。如果是在单线程下操作大量数据,应优先使用StringBuilder类。如果是在多线程下操作大量数据,应优先使用StringBuilder类。加分回答
我们可以通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法改变这个字符串对象的序列。如果通过StringBuffer生成了最终想要的字符串,那我们就可以调用其toString()方法将其转化为一个String对象。StringBuilder是JDK1.5新增的类,提供的API与StringBuffer类似。
延伸阅读
为什么StringBuffer线程安全,我们可以通过源码来查看一下。
StringBuffer部分源码:
StringBuilder部分源码:
我们看到,StringBuffer很多方法都是synchronized 修饰的所以做到了线程安全,而StringBuilder并没有兼顾到线程安全的问题,所以多线程环境应避免使用StringBuilder哦。