我知道StringBuilder應該用於連接多個字符串,而不是使用+。我的問題是關鍵點是什麼?Java - 多少個字符串concat應該提示使用StringBuilder?
我被告知,如果連接4個或更多的字符串,你應該使用StringBuilder.append(),對於其他任何事情,請使用+。 是這樣嗎?或者是stringbuilder的效率超過4的那個點?
我知道StringBuilder應該用於連接多個字符串,而不是使用+。我的問題是關鍵點是什麼?Java - 多少個字符串concat應該提示使用StringBuilder?
我被告知,如果連接4個或更多的字符串,你應該使用StringBuilder.append(),對於其他任何事情,請使用+。 是這樣嗎?或者是stringbuilder的效率超過4的那個點?
沒有定義答案,因爲它取決於JVM
的實現。當我需要連接3個以上的字符串時,我使用StringBuilder
。
我注意到一個很好的例子。當您需要連接static final String
時,您不必使用StringBuilder
。 compliler將連接它與我的表現下降:
final class Example {
public static final String STRING_ONE = "string";
public static final String STRING_TWO = "string";
public static final String STRING_THREE = "string";
public static final String STRING_FOUR = "string";
public String getBigString() {
return STRING_ONE + STRING_TWO + STRING_THREE + STRING_FOUR;
}
}
另外我對這個問題非常感興趣。我嘗試着實施一個很好的測試,並詢問有關here。
我會說編譯器會用StringBuilder
本身代替加號。
在這種情況下,您有幾種情況需要避免。例如在迴路中使用+。對於每次迭代,都會創建一個新的StringBuilder
。
可能想讀這question
開始在JSE 5,+號編譯過程中轉換成一個StringBuilder。
有一個警告此雖然,這:
String blam = a + b + c + d + e;
結果在一個stringbuilder的和5次追加(如預期)
這;但是:
String blam = a;
blam += b + c;
blam := d + e;
導致3個串行構建器(每行一個)。
點:+符號很好,只是將它堆疊在一行代碼中。
從Java 1.5開始,當在源中使用+
時,編譯器自動使用StringBuilder
。
Java語言提供對字符串連接運算符(+)的特殊支持,以及對其他對象的字符串轉換。字符串連接通過StringBuilder(或StringBuffer)類及其append方法實現。
編譯器在優化這個東西方面很不錯,所以通常你不會獲得太多。但是,如果你在循環中進行連接,你可能會從使用StringBuilder中獲得一些好處。
零。
很多年以前,在很遠很遠(1.4)一個Java版本,一些人通過StringBuffer
(線程安全等效StringBuilder
,這還沒有發明出來)建議更換級聯。
通過引入StringBuilder
,和串接在的更快StringBuilder
,「優化的」使用不需要的同步發生StringBuffer
代碼方面的重新定義,而具有+
非最佳代碼被自動地享有的StringBuilder
的好處。
我將使用StringBuilder
當串聯與控制結構或循環混合,或當我需要更新字符串中的某些字符。否則,我認爲編譯器足夠聰明,可以很好地處理傳統的並置。
http://stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java – 2013-03-19 14:58:49
這可能是對你有意思:http://stackoverflow.com/questions/7586266/ is-chain-of-stringbuilder-append-more-efficient-than-string-concatenation – 2013-03-19 15:00:21