目录
区别主要分三个方面即可变性、线程安全性和性能。
从可变性来看
String是不可变的,因为在String类中使用final关键字修饰字符数组来保存字符串。
而StringBuffer和StringBuilder都继承自AbstractStringBuilder类,在AbstractStringBuilder类虽然也是使用字符数组来保存字符串,但没有使用final修饰,所以可变。
从线程安全性来看
String是不可变的,也可看做常量,因此线程安全。而StringBuffer虽然是可变的,但因为其对方法加了同步锁或对调用的方法加了同步锁,所以也是线程安全的。StringBuilder并没有对方法加同步锁,所以是线程不安全的。
从性能来看
每次对String类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String对象。StringBuffer和StringBuilder可以对本身进行操作,不用生成新的对象并改变引用。因此三者中String性能最差。StringBuilder是线程不安全的,比StringBuffer性能要好。
总结
1.操作少量的数据适用String。
2.单线程操作大量数据适用StringBuilder
3.多线程操作大量数据适用StringBuffer