String 、StringBuffer 和StringBuilder 的区别是什么?从几个方面来解释。
1、可变性
String类中使用final关键字字符数组保存字符串,它的长度是不可变的。
StringBuffer 和 StringBuilder 都继承自AbstractStringBuilder类,而在AbstractStringBuilder中也是使用字符数组保存字符串,但是没有用final关键字修饰,所以这两种对象都是可变的。
2、线程安全性
String中的对象是不可变的,就是常量,线程安全。
StringBuffer 对方法加了同步锁(使用synchronized 关键字修饰),因此是线程安全的。
StringBuild 对方法没有加同步锁,所以是非线程安全的。
3、执行效率
三者在执行速度方面的比较:StringBuilder > StringBuffer >String
4、应用场景
操作少量数据用 String
单线程操作大量数据字符串用 StringBuilder
多线程操作大量数据字符串用 StringBuffer