StringBuilder和Stringbuffer区别

发布时间 2023-07-27 15:01:49作者: 俟礼

String buffer 和 String builder 区别
(1)StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,
(2)只是 StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没
有这个修饰,可以被认为是线程不安全的。
(3)在单线程程序下,StringBuilder 效率更快,因为它不需要加锁,不具备多线程安全而 StringBuffer 则每次都需要判断锁,效率相对更低。

StringBuffer、StringBuilder和String一样,也用来代表字符串。

String类是不可变类,任何对String的改变都会引发新的String对象的生成;

StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象;

StringBuilder也是可变类,任何对它所指代的字符串的改变都不会产生新的对象;

StringBuffer和StringBuilder这两个可变类的原理和操作基本相同。



StringBuffer和StringBuilder类的主要区别:
在于StringBuffer支持并发操作,线性安全的,适合多线程中使用。
StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。
StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

执行速度:StringBuilder > StringBuffer

StringBuffer StringBuilder
支持并发操作 不支持并发操作
线程安全 线程不安全
适合多线程使用 不适合多线程使用

对这两个类的使用规则:

(1)基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。

数据量 使用类型
操作少量数据 String
单线程操作大量数据 StringBuilder
多线程操作大量数据 StringBuffer

(2)不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。