一、相同点
String、StringBuffer、StringBuilder都用来封装字符串,并提供一系列方法来改进字符串。
二、不同点
2.1 可变与不可变
String是不可变类,一旦一个String对象被创建,该对象中的字符串序列不可改变,直至对象被销毁。
StringBuffer、StringBuilder是可变类,常用方法有append()、insert()、reverse()、setCharAt()、setLength()等。生成最终想要的字符串后若不再更改,可调用它的toString()方法将该对象转换成一个String对象。
2.2 线程安全与不安全
StringBuilder是线程不安全的,StringBuffer是线程安全的,String也是线程安全的。
StringBuffer中的很多方法可以带有synchronized关键字来保证线程安全,而StringBuilder的方法则不行。所以如果要进行的操作是多线程的,最好使用StringBuffer,而在单线程情况下,优先使用StringBuilder,因为它速度更快。
2.3 运行速度
StringBuilder > StringBuffer > String
三、适用情况
操作字符串少时,优先String,最熟悉的就是这个了
操作字符串数据量大时,考虑到String速度较慢,优先考虑StringBuilder和StringBuffer,单线程或线程安全时优先使用StringBuilder,线程不安全时优先使用StringBuffer来保证线程安全。