可變性
String是不可變的,這是因為String內部用于存儲數據的char[]數組用了final關鍵字修飾,而且是private的,并且沒有對外提供修改數組的方法。
StringBuffer和StringBuilder是可變的,它們內部的char數組沒有用final關鍵字修飾。
線程安全性
由于String是不可變的,所以它是線程安全的。
StringBuffer中的方法都用了Synchronized修飾,也是線程安全的。
而StringBuilder中的方法沒有用synchronized修飾,線程不安全。
性能
String不可變,每次操作String都會生成新的對象,它的性能最低。
StringBuffer中的方法用了synchronized關鍵字修飾,性能低于StringBuilder但高于String。
適合場景
String適合操作少量的數據。
StringBuffer適合多線程操作大量數據。
StringBuilder適合單線程操作大量數據。