簡單的來說:String 類中使用 final 關(guān)鍵字修飾字符數(shù)組來保存字符串,private final char value[]沸柔,所以String 對(duì)象是不可變的循衰。
所以當(dāng)我們創(chuàng)建了一個(gè)string然后改變它的值的時(shí)候 底層是創(chuàng)建了一個(gè)新的string將值賦給它。這樣開銷是比較大的褐澎。
而 StringBuilder 與 StringBuffer 都繼承自 AbstractStringBuilder 類会钝,在 AbstractStringBuilder 中也是使用字符數(shù)組保存字符串char[]value 但是沒有用 final 關(guān)鍵字修飾,所以這兩種對(duì)象都是可變的乱凿。
線程安全性:
String 中的對(duì)象是不可變的顽素,也就可以理解為常量,線程安全徒蟆。
StringBuffer 對(duì)方法加了同步鎖或者對(duì)調(diào)用的方法加了同步鎖胁出,所以是線程安全的。
StringBuilder 并沒有對(duì)方法進(jìn)行加同步鎖段审,所以是非線程安全的全蝶。(但是性能比前者高15%左右)