在字節碼使用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. 將JSONArray轉換爲StringBuilder時的java.lang.OutOfMemoryError
- 2. 的StringBuilder和字節轉換
- 3. 將StringBuilder轉換爲安全字符串
- 4. java將ArrayList <StringBuilder>轉換爲ArrayList <String>
- 5. C#StringBuilder的:堅持一個StringBuilder對象轉換爲VARCHAR列 - SQL服務器
- 6. 使用StringBuilder的JAVA字符串反轉
- 7. 轉換爲Java的Unicode
- 8. Java「的」轉換爲double
- 9. Stringbuilder vs SQL FOR XML/XSL轉換
- 10. Alog轉換爲Java
- 11. java轉換爲int
- 12. Java轉換爲PDF
- 13. RCON轉換爲Java
- 14. Java轉換爲Integer?
- 15. 的java:使用StringBuilder之初
- 16. StringBuilder的UFT-8在Java中
- 17. Java StringBuilder巨大的開銷
- 18. 混淆的StringBuilder Java中
- 19. 的StringBuilder()與StringBuilder的(空)VS的StringBuilder( 「」)
- 20. 如何最好地將StringBuilder轉換爲String []?
- 21. 如何將StringBuilder轉換爲Byte數組而不使用StringBuilder.ToString()
- 22. Stringbuilder在將其轉換爲字符串後添加反斜槓
- 23. 如何獲取一個stringbuilder並將其轉換爲一個streamReader?
- 24. 將double轉換爲Java中的char數組(不使用Double.toString或StringBuilder之類的對象)的算法?
- 25. 十進制轉換爲十六進制的轉換(Java)的
- 26. 轉換數據表的給詞典<字符串,StringBuilder的>
- 27. 在用於concatinating的Java 8'+'操作符由新的StringBuilder替換()
- 28. 的Java編譯器+連接替換StringBuilder的
- 29. 如果編譯器自動將字符串連接轉換爲StringBuilder,爲什麼要顯式使用StringBuilder?
- 30. 操縱一個StringBuilder在java的一個StringBuilder陣列