String,StringBuffer 和 StringBuilder 的區別


首先,String,字符串常量,長度不可變,而StringBuffer和StringBuild作為字符串變量,值是可變的。由於這種區別,所以,但String的值改變的時候,它會檢查內存中有沒有相似的值,如果有,則直接拿過來,如果沒有,則從新生成一個對象。如:

String str1 = "x";
String str2 = "x";

在這里,其實只生成了一個對象。再比如:

String str1 = "x";
String str2 = "y";

//另一中情況
String str1 = "x";
str1 = "y";

上面兩種情形都改變了String的值(這里可以理解為 str1,str2 引用了兩個不同的值?),所以都重新生成了一個對象。

 

再來看看StringBuffer,StringBuffer作為一個變量,他的值是可變的,所以不管我們有沒有改變它的值,它都只生成了那一個對象。如:

//改變值
StringBuffer sb = new StringBuffer();
sb.apend("x");
sb.append("y");

//另一中情況,不改變實際值
StringBuffer sb = new StringBuffer();
sb.append("x");
sb.replace(0,1,"x");

像上面這樣,不管我們有沒有改變StringBuffer的值,他都不會重新生成對象,而是從新調用最開始new的那個對象。

而StringBuilder在這點上和StringBuffer是一致的。

 

StringBuffer 和StringBuilder 的區別

StringBuffer是同步的而StringBuilder是異步的,在有安全的要求下,我們只能使用StringBuffer,如果沒有的話,我們就可以使用StringBuilder,因為StringBuilder的效率更高。

而在效率方面的對比,從高到底,依次是:StringBuilder > StringBuffer > String (也有人說結果更這個恰恰相反,可我沒做個試驗,只能個人感覺應該是這樣)

 

PS:其實寫下這篇隨筆我的心一直在忐忑,因為我自己對這個概念也有點模糊,如果哪里有不對的地方,懇請大家指正,謝謝。








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM