2009-11-10 39 views
0

我讀了Java StringBuilder使用大約1 MB大約500個字符的地方。這是真的嗎?如果是這樣,是不是有點極端? StringBuilder是否用這些內存來做一些令人難以置信的事情?這是什麼原因,這是否意味着我不應該太多地使用這個類?Java StringBuilder巨大的開銷

+3

你是從哪裏讀的? – McDowell 2009-11-10 11:40:24

+0

當然,在互聯網上的某個地方。 – 2009-11-10 14:34:27

回答

13

不,這是完全垃圾 - 除非你創建一個具有龐大容量的StringBuilder,當然。

Java通常使用每個字符2個字節。在String和StringBuilder中,長度和數組本身都有一些開銷,但不是很多。

現在1K的500個字符是正確的......我懷疑這是造成混亂的原因。 (或者你聽錯了,或者那個跟你說話的人重複了一次他們就會誤認爲)。

0

這個信息是錯誤的,你還記得這個信息的來源是什麼嗎?如果是的話,你應該糾正它。 Java通常每個字符使用2個字節。

2

我看到兩種情況下的StringBuilder的傾向於使用的內存大量:

  • 當StringBuilder的與一個瘋狂的初始容量創建。
  • StringBuilder的人被「緩存」到「保存」對象分配時間。

因此,在第二種情況下,如果某些使用SB的代碼在其中存儲了一個非常大的字符串,則StringBuilder可能會消耗1Mb的內存。這是因爲它只會增長,但不會縮小它的內部字符數組。

這兩種情況都可以(也應該)容易避免。

0

我覺得StringBuilder是最好的選擇。它也更快更安全。這取決於場景。如果你的字符串字面值不會頻繁變化,那麼我會說String是更好的選擇,因爲它是不可變的,否則StringBuilder就在那裏。現在對於你正在談論的空間,我從來沒有聽說過任何地方。

+0

比什麼快?更安全嗎?請注意,與StringBuffer相比,StringBuilder不是線程安全的。順便說一句,這個問題已經差不多8歲了...... – Andy 2017-05-05 17:56:10

+0

比StringBuffer更快。任何其他你需要理解的東西。 – Mike 2017-05-05 18:11:06