在字節碼使用concat我複習用javac命令行編譯的代碼,我看到了,每當我用字符串連接與+操作,編譯代碼的StringBuilder的append()方法代替。 現在我認爲使用StringBuilder和字符串連接具有相同的性能,因爲他們有相似的字節碼,它是正確的嗎?的java:轉換爲StringBuilder的
3
A
回答
11
是的,這是真的!但是當你在循環中連接時,行爲會有所不同。例如
String str = "Some string";
for (int i = 0; i < 10; i++) {
str += i;
}
新StringBuilder
將在每一個循環迭代(通過str的初始值),並在每一個端部被構造迭代會有級聯與初始字符串(實際上StringBuilder
與str
初始值)。
因此,只有在循環中使用字符串連接時,您才需要自己創建StringBuilder。
0
的主要差別(和編譯器使用StringBuilder
的原因字符串連接)是String
是不可變的,而StringBuilder
不是。
例如,僅使用字符串計算s1 + s2 + s3
將需要s1
的字符被複制兩次。這可以(並且)通過使用StringBuilder
來避免。
這種優化明確地由JLS允許:
一個實現可以選擇在一個步驟中執行轉換和級聯,以避免創建然後丟棄一箇中間字符串對象。爲了提高重複字符串連接的性能,Java編譯器可以使用StringBuffer類或類似技術來減少通過評估表達式創建的中間String對象的數量。
相關問題
- 1. 將stringbuilder轉換爲guid
- 2. StringBuilder的時轉換爲字符串
- 3. 將JSONArray轉換爲StringBuilder時的java.lang.OutOfMemoryError
- 4. 的StringBuilder和字節轉換
- 5. 爲什麼不能在Java中將Object []轉換爲StringBuilder []?
- 6. 將StringBuilder轉換爲安全字符串
- 7. 將StringBuilder轉換爲鋸齒形數組
- 8. 將一些java函數轉換爲php(char)和StringBuilder
- 9. java將ArrayList <StringBuilder>轉換爲ArrayList <String>
- 10. C#StringBuilder的:堅持一個StringBuilder對象轉換爲VARCHAR列 - SQL服務器
- 11. 使用StringBuilder的JAVA字符串反轉
- 12. 將stringbuilder中的空值轉換爲「not available」字符串
- 13. 一些問題,從StringBuilder的轉換爲字符串
- 14. 使用StringBuilder將包含多個編碼的byte []轉換爲String
- 15. 轉換爲Java的Unicode
- 16. 轉換爲int的Java
- 17. Java「的」轉換爲double
- 18. 的Java sha512crypt轉換爲C#
- 19. Stringbuilder vs SQL FOR XML/XSL轉換
- 20. java String和StringBuilder
- 21. Alog轉換爲Java
- 22. Java轉換爲PDF
- 23. java轉換爲int
- 24. AS3轉換爲Java
- 25. RCON轉換爲Java
- 26. Java轉換爲Integer?
- 27. 的StringBuilder()與StringBuilder的(空)VS的StringBuilder( 「」)
- 28. Java StringBuilder巨大的開銷
- 29. 的java:使用StringBuilder之初
- 30. 混淆的StringBuilder Java中