1、String类与StringBuilder类
(1)、String类的底层是byte数组,但是却 被 final 修饰;故而String类型是常量,不可变
StringBuilder类的底层也是byte数组,但是却 没被 final 修饰,所以StringBuilder类型是变量,可改变
(2)、String类没有缓冲区概念,所以字符串的操作效率较低
StringBuilder类拥有缓冲区,缓冲区长度默认为16,当要超出16时会自动进行扩容;所以字符串操作效率更高
2、String类、StringBuffer类与StringBuilder类
(1)、运行速度的比较:String < StringBuffer < StringBuilder
(2)、线程安全的比较:String与StringBuffer都是 线程安全 ,而StringBuilder 线程不安全
注意: 所有不可变类 都是线程安全 的,但是线程安全的类 不一定 就是不可变类。如下:
String是不可变类,所以线程安全;而Stringbuffer是靠锁才得以线程安全
3、适用场景
- String类:适用于 少量 的字符串操作的场景
- StringBuffer类:适用于 单线程 下在字符串缓冲区进行大量操作的场景
- StringBuilder类:适用于 多线程 下在字符串缓冲区进行大量操作的场景