简单的几句
- String是final修饰的,不可变,每次操作都会产生新的对象。
- StringBuffer和StringBuilder都是在原对象上进行操作
- StringBuffer是线程安全的,StringBuilder是线程不安全的。
- StringBuffer方法是被synchronized修饰的
所以在性能方面大家应该明白是
StringBuilder>StringBuffer>String
Buffer上了锁,锁是基于操作系统调度,所以性能稍小于Builder
场景
经常需要改变字符串内容,要使用哪个?
- 优先使用StringBuilder
- 多线程使用贡献变量的时候要使用StringBuffer,要不然会出现读写异常(亲测在10个线程下使用共享变量不加锁就会导致读写异常)
反思
那么问题来了,既然String性能这么低,为什么String不设计成不可变的呢?可以参考一下这一篇博客。
https://blog.csdn.net/giaogege666/article/details/129395495