天天看點

java語言中String,StringBuffer,StringBuilder的差別

我認為String和StringBuffer的差別包括三點:

(1)String是不可變對象,什麼意思呢,就是說當我們建立一個String對象str1 = "abc",此時開辟了一個空間存放着abc,str1指向它,現在我給str1“重新指派”str1=“def”,此時其實是重新開辟了一個空間存放def,str1指向新空間。而StringBuffer則是這樣,它會直接修改開始那個空間裡的值,是以,String是改變的位址,而StringBuffer則是修改值。

(2)在判等時,string 對象重寫了object對象的equals()方法,比較的是值而非位址,而StringBuffer沒有重寫這個方法,判别的是位址。

(3)在連接配接字元串時,通常選用stringbuffer,因為效率更高一些,比如string a = new String("hello"); a += "world";其實在連接配接的時候,是将a轉化為一個stringbuffer對象,然後利用stringbuffer的append方法,連接配接world,最後再轉化為string對象。

StringBuffer和StringBuilder的差別在于,StringBuffer是線程安全的,而StringBuilder是不安全的。