String、StringBuffer和StringBuilder

從以下三點(diǎn)來(lái)分析:

1、可變性

String類中使用final關(guān)鍵字字符數(shù)組保存字符串,private final char value[],所以String對(duì)象是不可變的。而StringBuffer和StringBuilder都繼承自AbstractStringBuilder類,也是使用字符數(shù)組保存字符串,但是沒(méi)有使用final修飾,所以這兩種對(duì)象都是可變的。

2、線程安全性

String中的對(duì)象是不可變的,也就可以理解為常量,線程安全。StringBuffer對(duì)方法加了同步鎖或者對(duì)調(diào)用的方法加了同步鎖,所以線程是安全的。StringBuilder并沒(méi)有對(duì)方法進(jìn)行加同步鎖,所以非線程安全。

3、性能

每次對(duì)String類型進(jìn)行改變的時(shí)候,都會(huì)生成一個(gè)新的String對(duì)象,然后將指針指向新的String對(duì)象。

StringBuffer和String每次都會(huì)對(duì)StringBuffer對(duì)象本身進(jìn)行操作,而不是生成新的對(duì)象并改變對(duì)象引用。相同情況下使用StringBuilder相比使用StringBuffer僅能獲得10%-15%左右的性能提升,卻要冒著多線程不安全的風(fēng)險(xiǎn)。

總結(jié):

1、操作少量數(shù)據(jù)使用String

2、單線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù):StringBuilder

3、多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù):StringBuffer

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容