String ,StringBuilder ,StringBuffer區(qū)別與聯(lián)系

1. String 類

String的值是不可變的,這就導(dǎo)致每次對String的操作都會生成新的String對象,不僅效率低下,而且大量浪費有限的內(nèi)存空間。

String a = "a"; //假設(shè)a指向地址0x0001

a = "b";//重新賦值后a指向地址0x0002,但0x0001地址中保存的"a"依舊存在,但已經(jīng)不再是a所指向的,a 已經(jīng)指向了其它地址。

因此String的操作都是改變賦值地址而不是改變值操作。

2. StringBuffer是可變類,和線程安全的字符串操作類,任何對它指向的字符串的操作都不會產(chǎn)生新的對象。 每個StringBuffer對象都有一定的緩沖區(qū)容量,當(dāng)字符串大小沒有超過容量時,不會分配新的容量,當(dāng)字符串大小超過容量時,會自動增加容量。

StringBuffer buf=new StringBuffer(); //分配長16字節(jié)的字符緩沖區(qū)

StringBuffer buf=new StringBuffer(512); //分配長512字節(jié)的字符緩沖區(qū)

StringBuffer buf=new StringBuffer("this is a test")//在緩沖區(qū)中存放了字符串,并在后面預(yù)留了16字節(jié)的空緩沖區(qū)。

3.StringBuffer

StringBuffer和StringBuilder類功能基本相似,主要區(qū)別在于StringBuffer類的方法是多線程、安全的,而 StringBuilder不是線程安全的,相比而言,StringBuilder類會略微快一點。對于經(jīng)常要改變值的字符串應(yīng)該使用 StringBuffer和StringBuilder類。

4.線程安全

StringBuffer 線程安全

StringBuilder 線程不安全

5.速度

一般情況下,速度從快到慢:StringBuilder > StringBuffer > String,這種比較是相對的,不是絕對的。

6.總結(jié)

(1).如果要操作少量的數(shù)據(jù)用 = String

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

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

出自:http://www.open-open.com/lib/view/open1322537017406.html

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

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

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