簡而言之:
三者區(qū)別主要是運行速度和線程安全兩個方面沽瞭。
1 運行速度比較:StringBuilder > StringBuffer > String
具體分析:
(1) String
String本身是不可改變的绣否,它只能賦值一次坎匿,每一次內(nèi)容發(fā)生改變京办,都會生成一個新的同名的對象捡鱼,然后原有的對象引用新的對象拐叉,而每一次生成新對象都會對系統(tǒng)性能產(chǎn)生影響们何。
(2) StringBuilder和StringBuffer
而StringBuilder類則不同萄焦,每次操作都是對自身對象進行操作,而不是生成新的對象冤竹,其所占空間會隨著內(nèi)容的增加而擴充拂封,這樣,在做大量的修改操作時鹦蠕,不會因生成大量匿名對象而影響系統(tǒng)性能
如何選擇
當程序中需要大量的對某個字符串進行操作時冒签,應(yīng)該考慮應(yīng)用StringBuilder類處理該字符串,其設(shè)計目的就是針對大量string操作的一種改進辦法钟病,避免產(chǎn)生太多的臨時對象萧恕;而當程序中只是對某個字符串進行一次或幾次操作時,采用string類即可档悠。
2 在線程安全上廊鸥,StringBuilder是線程不安全的,而StringBuffer是線程安全的辖所。
如果一個StringBuffer對象在字符串緩沖區(qū)被多個線程使用時惰说,StringBuffer中很多方法可以帶有synchronized關(guān)鍵字,所以可以保證線程是安全的
如何選擇
單線程缘回,選擇速度不較快的StringBuilder吆视;多線程,使用StringBuffer
3 總結(jié)一下
String:適用于少量的字符串操作的情況
StringBuilder:適用于單線程下酥宴,對字符串進行大量操作的情況
StringBuffer:適用多線程下啦吧,對字符串進行大量操作的情況
擴展
三者繼承關(guān)系
參考:
https://www.cnblogs.com/mrxy/p/8057657.html
https://www.cnblogs.com/su-feng/p/6659064.html