我幾乎總是使用StringBuilder(int)來避免愚蠢的重新分配與微小的默認容量。任何javac實現都沒有做任何特殊的事情來爲串聯中的StringBuilder的隱式使用使用合適的容量嗎?給定文字長度,"abcdefghijklmnopqrstuvwxyz" + numbers + "!.?:"
至少會使用30的初始容量?隱式StringBuilder大小
2
A
回答
4
是的,它會在Java 9中變得聰明 - 實際上更聰明 - (這是我可以鬆散地聲稱自己是我的一部分 - 我made最初的建議是預設StringBuilders,啓發了他們最終採用的更好,更強大的方法。)
http://openjdk.java.net/jeps/280除其他問題外,還特別提到「有時我們需要適當地預設StringBuilder」,這是一個具體的改進。
(而這個故事的寓意是,簡單地和可讀性很強地編寫代碼,讓編譯器和JIT採取的適當他們的工作最優化的服務。)
0
這可能取決於你的編譯器版本,設置等
爲了測試這一點,我創建了一個簡單的方法:
public static void main(String[] args) {
System.out.println("abcdefghijklmnopqrstuvwxyz" + args[0] + "!.?:");
}
和編譯,然後通過反編譯它運行後,我們得到以下結果:
System.out.println((new StringBuilder()).append("abcdefghijklmnopqrstuvwxyz").append(args[0]).append("!.?:").toString());
所以看起來,至少在某些javac版本中,它只是使用默認值。
手動檢查字節碼錶示相同的事情。
相關問題
- 1. 替換大小寫不敏感的StringBuilder
- 2. 的StringBuffer/StringBuilder的大小在Java
- 3. .net 4.5中的StringBuilder是否具有大於MaxChunkSize的塊大小
- 4. Stringbuilder格式日期
- 5. StringBuilder的格式化
- 6. Java StringBuilder巨大的開銷
- 7. 將stringBuilder強制爲大寫
- 8. StringBuilder的最大長度
- 9. Vb.net Stringbuilder替換大文件
- 10. StringBuilder的最大容量
- 11. 隱式和顯式ArrayList大小聲明之間的區別?
- 12. StringBuilder最有效的初始容量大小?
- 13. 隱藏輸入最大值大小
- 14. 什麼時候StringBuffer/StringBuilder沒有被編譯器隱式使用?
- 15. 的StringBuilder()與StringBuilder的(空)VS的StringBuilder( 「」)
- 16. StringBuilder的格式結構
- 17. StringBuilder字符串格式
- 18. RegEx,StringBuilder和大對象堆碎片
- 19. 創建一個StringBuilder具有大容量
- 20. stringbuilder不能跳過大括號
- 21. stringbuilder可容納的最大字符數
- 22. C#String/StringBuilder MemoryException對大集替換
- 23. 獲取隱藏結構的大小C
- 24. C#隱藏調整大小光標
- 25. 放大,縮小mkmapview顯示隱藏mkannotations
- 26. 使用Python隱藏文件大小
- 27. 調整隱藏幀的大小
- 28. 用jQuery顯示/隱藏div的大小?
- 29. CSS大小隱藏div的錯誤
- 30. 獲取隱藏視圖的大小 - Xamarin.Forms