引言:对String、StringBuffer和StringBuilder一直不是很了解
系统地整理一下java字符串处理
我的理解:String,使用final修饰,是线程安全的,每次改变都创建新的对象,
StrngBuffer,线程安全,效率略低,适合多线程更新较多的情况
StringBuilder线程不安全,效率较高,适合更新多的情况
总的来说分为三个方面来对比理解:
一、是否可变
String是Final修饰的是不可变的常量,每次赋值都是创建新的变量
StringBuffer和StringBuilder都是继承AbstrictStringBuilder类,AbstrictStringBuilder使用字符数组保存字符串,重新赋值不会创建新的对象
二、是否线程安全
String是不可变的所以肯定是线程安全的
StringBuffer对字符串操作方法使用关键字synchronized加了同步锁,所以也是线程安全的
StringBuilder没有对方法加同步锁,所以是非线程安全的
三、使用场景
- String:适合少量数据,更新少的情景
- StringBuilder:适合单线程下大量数据的更新场景
- StringBuffer:适合多线程下操作缓冲区下大量数据