筆者經常忘記三者之間的區別,下面自己總結一番,畫一個表格來展示
Item | "+"區別 | 多線程 | 性能 | 使用場景 | 優化 |
---|---|---|---|---|---|
String | 不可變類,重新創建字符串 | 不安全 | 拼接時,性能差 | 操作少量數據,字符串不變時 | 無 |
StringBuilder | 可變類,原字符串基礎上生成字符串 | 不安全 | 性能最好(比StringBuffer高10%-15%) | 單線程操作大量數據(方法內部,用完回收) | 盡可能指定容量(默認:16,不超過16個字符不用指定),不指定顯著降低性能 |
StringBuffer | 可變類,原字符串基礎上生成字符串 | 安全 | 性能好 | 主要用在全局變量中,多線程下安全 | 同上 |
在現實的模塊化編程中,負責某一模塊的程序員不一定能清晰的判斷該模塊是否會放入多線程的環境中運行,除非確定系統的瓶頸是在StringBuffer上,并且確定你的模塊不會運行在多線程模式下,才可以采用StringBuilder,否則還是用StringBuffer