JAVA平臺提供了兩個(gè)類:String和StringBuffer置谦,它們可以儲存和操作字符串跛锌,即包含多個(gè)字符的字符數(shù)據(jù)端辱。
String類表示內(nèi)容不可改變的字符串次企。
StringBuffer類表示內(nèi)容可以被修改的字符串醋火。
1.當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候就可以使用StringBuffer悠汽,也可以使用StringBuffers來動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。
2.String實(shí)現(xiàn)了equals方法芥驳,new String(“abc”).equals(new String(“abc”)的結(jié)果為true,而StringBuffer沒有實(shí)現(xiàn)equals方法柿冲,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的結(jié)果為false兆旬。
舉一個(gè)具體的例子來說明假抄,我們要把1到100的所有數(shù)字拼起來,組成一個(gè)串丽猬。
StringBuffer sbf = new StringBuffer(); ?
for(int i=0;i<100;i++)
{
????sbf.append(i);
}
上面的代碼效率很高宿饱,因?yàn)橹粍?chuàng)建了一個(gè)StringBuffer對象,而下面的代碼效率很低宝鼓,因?yàn)閯?chuàng)建了101個(gè)對象刑棵。
String str = new String(); ?
for(int i=0;i<100;i++)
{
????str = str + i;
}
3.String覆蓋了equals方法和hashCode方法,而StringBuffer沒有覆蓋equals方法和hashCode方法愚铡,所以蛉签,將StringBuffer對象存儲進(jìn)Java集合類中時(shí)會出現(xiàn)問題。
StringBuffer與StringBuilder的區(qū)別
StringBuffer和StringBuilder類都表示內(nèi)容可以被修改的字符串沥寥,StringBuilder是線程不安全的碍舍,運(yùn)行效率高,StringBuffer是線程安全的邑雅,運(yùn)行效率相對較低片橡。如果一個(gè)字符串變量是在方法里面定義,這種情況只可能有一個(gè)線程訪問它淮野,不存在不安全的因素了捧书,則用StringBuilder吹泡。如果要在類里面定義成員變量,并且這個(gè)類的實(shí)例對象會在多線程環(huán)境下使用经瓷,那么最好用StringBuffer爆哑。