String是不可變的,StringBuffer和StringBuilder是可變的。StringBuffer是線程安全的,StringBuilder是非線程安全的。
String的 + 是如何實現的
使用+拼接字符串,其實只是Java提供的一個語法糖。
其實String的 + 底層是new 了一個StringBuilder,使用append方法對這些字符串進行了拼接。
"a" + "b" + "c";
(new StringBuilder()).append("a").append("b").append("c");
一句話可以總結,+操作底層是使用了StringBuilder.append()。
StringBuilder和StringBuffer
StringBuilder類和String類類似,底層也是封裝了一個字符數組。
但是他與String不同的是,他并不是final的,所以他的字符數組是可以修改的。
與此同時,他有一個實例變量count,表示數組中已經使用的字符個數。
StringBuffer和StringBuilder是類似的,最大的區別就是StringBuffer是線程安全的,因為StringBuffer的append的方法上加上了synchronization修飾符。
總結
String是不可變的,因為使用了final
StringBuilder和StringBuffer是可變的,因為底層的字符數組沒有被final修飾
StringBuilder是線程不安全的,StringBuffer是線程安全的,因為StringBuffer的append方法使用了synchronization。