Java 面試高頻考點:String 為何設計為不可變?什麼是「強不變」與「弱不變」?StringBuffer/StringBuilder 又有何不同?本文從記憶體模型、線程安全、效能三維度深度剖析。
String、包裝類(Integer 等)屬此類。StringBuilder(非線程安全)與 StringBuffer(線程安全)。hashCode() 只需計算一次快取,作為 HashMap Key 時效能極佳。| 特性 | StringBuffer | StringBuilder |
|---|---|---|
| 線程安全 | 同步方法,安全 | 非同步,不安全 |
| 效能 | 較低(鎖開銷) | 高(單執行緒首選) |
| 適用場景 | 多執行緒字串拼接 | 單執行緒、大量拼接 |
"a" + "b")編譯器自動優化為 "ab",無額外開銷。StringBuilder,避免產生大量中間 String 物件觸發頻繁 GC。String(不可變、安全),內部拼接用 StringBuilder,最後 toString() 回傳。理解「不變模式」不只是為了面試,更是寫出高效、安全 Java 程式碼的基石。記住:不可變是特性,不是限制——善用它,才能駕馭它。