2011-09-14 77 views

回答

0

彙集以避免重複表示相同的對象。

不可變使分享更容易。

6

字符串對象不是通常僅合併字符串常量通過實習自動合併。 (您可以手動調用intern的過程中,甚至通過HashSet<String>等創建自己的池)這是唯一安全的因爲字符串是不可變的 - 這是有道理的,以確保任何編譯時間常數只在內存中出現一次。

你不會願意支付的查找在實習生池的字符串(或保持它撒手人寰)爲字符串中的系統的價格,因爲有可能會隨着時間的推移許多不同的字符串。然而,從類加載的字符串常量只要這些類一直存在,並且通過將它們內聯一次,您可以減少GC流失所需的內存。

+0

@Downvoter:小心評論? –

3

如果字符串是不是一成不變的,你將無法

  • 安全地從一個getter返回一個字符串字段不破壞封裝,因爲調用者可能會修改背後的字符串的內容以在線程之間共享字符串,因爲某些線程可能會修改其內容。所有對字符串的訪問都必須進行同步。
  • 使用字符串作爲包含HashMap /樹狀鍵,因爲有人可能會改變其價值,因此其的hashCode /比較順序
  • 彙集字符串,以具有相同的常量字符串的單個實例
  • 有串共享其串相同的字符數組

總之,生活會複雜得多,因爲你將不得不作出的字符串的防守拷貝無處不在,StackOverflow上會提供關於微妙的錯誤,其中一些問題被淹沒字符串存儲在地圖中,但無法找到。

1

可變字符串檢出:java.lang中的StringBuffer和StringBuilder。