Java基础Demo01——String,StringBuffer,StringBuilder的区别
分类:
文章
•
2023-10-16 18:30:44
String,StringBuffer,StringBuilder的区别
- String由于final关键字的修饰,类不可被继承,对象不可被改变:


而在StringBuffer和StringBuilder中,两者都继承自AbstractStringBuilder抽象类,对象底层仍旧和String一样是一个byte数组,但是这里却没有final关键字修饰。
故:StringBuffer和StringBuilder虽不可被继承,但可被改变。


- String中的对象是不可变的,显然线程安全;
StringBuffer 的所有公开方法都是 synchronized 修饰,线程也是安全的;
StringBuilder对象既可改变,也无同步锁限制,故线程不安全。
注:同步锁Synchronized及其实现原理
- String由于在对字符串进行操作时一般只需要创建String一个对象,所以在数据量较小的情况下性能是优于StringBuffer和StringBuilder的。
但在数据量较大的情况下,由于String对象不可改变,每一次对字符串操作都会创建一个新的String对象,这将占用极大的内存空间并消耗掉大量时间。而StringBuilder与StringBuffer相比,没有安全锁机制,性能会更高。故在数据量较大的情况下,String<StringBuffer<StringBuilder
总结:
String-数据量小的情况下适用
StringBuffer-数据量较大的多线程情况下适用
StringBuilder-数据量较大的单线程情况下适用
- StringBuffer在细节上的优化:
StringBuffer与StringBuilder相比设立了缓冲区:


tostring返回的最后一个值的缓存。每当修改StringBuffer时清除。