2
A
回答
0
彙集以避免重複表示相同的對象。
不可變使分享更容易。
6
字符串對象不是通常僅合併字符串常量通過實習自動合併。 (您可以手動調用intern
的過程中,甚至通過HashSet<String>
等創建自己的池)這是唯一安全的因爲字符串是不可變的 - 這是有道理的,以確保任何編譯時間常數只在內存中出現一次。
你不會願意支付的查找在實習生池的字符串(或保持它撒手人寰)爲每字符串中的系統的價格,因爲有可能會隨着時間的推移許多不同的字符串。然而,從類加載的字符串常量只要這些類一直存在,並且通過將它們內聯一次,您可以減少GC流失所需的內存。
+0
@Downvoter:小心評論? –
2
An Immutable object是存在的最佳設計決策之一。它旨在簡化併發編程。共享對象的線程不能相互干擾。
如果你想可變字符串檢查:StringBuffer和StringBuilder
3
如果字符串是不是一成不變的,你將無法
- 安全地從一個getter返回一個字符串字段不破壞封裝,因爲調用者可能會修改背後的字符串的內容以在線程之間共享字符串,因爲某些線程可能會修改其內容。所有對字符串的訪問都必須進行同步。
- 使用字符串作爲包含HashMap /樹狀鍵,因爲有人可能會改變其價值,因此其的hashCode /比較順序
- 彙集字符串,以具有相同的常量字符串的單個實例
- 有串共享其串相同的字符數組
總之,生活會複雜得多,因爲你將不得不作出的字符串的防守拷貝無處不在,StackOverflow上會提供關於微妙的錯誤,其中一些問題被淹沒字符串存儲在地圖中,但無法找到。
1
可變字符串檢出:java.lang中的StringBuffer和StringBuilder。
相關問題
- 1. 這是什麼樣的設計模式?
- 2. JDK的概念,爲什麼它是這樣的設計
- 3. 爲什麼String類是final?
- 4. 爲什麼std :: string的空rep是這樣的?
- 5. 爲什麼總是這樣?
- 6. 這是爲什麼這樣做呢?
- 7. 這是爲什麼這樣工作?
- 8. 這個例子是什麼樣的Java設計模型?
- 9. 這是什麼樣的網絡程序設計語言? <!-- -->
- 10. 這是什麼類型(Swift)? var something = [(item1:String,item2:Float,item3:[String])]()
- 11. 爲什麼String是一個類?
- 12. 爲什麼可空類型的行爲是這樣
- 13. 爲什麼輸出是這樣的?
- 14. 爲什麼IE8不是這樣的JS?
- 15. 爲什麼輸出是這樣的?
- 16. 什麼是String類內部?
- 17. 什麼是String類型
- 18. 爲什麼golang文件結構設計這樣
- 19. 爲什麼UNIX時間(2)系統調用是這樣設計的?
- 20. 這是什麼樣的HTML?
- 21. 這是什麼樣的? - Java
- 22. 爲什麼像concat這樣的String方法創建一個新的String對象?
- 23. 設計這樣
- 24. 爲什麼這樣去代碼輸出是這樣的?
- 25. 爲什麼數組的類型是這樣的?
- 26. 這些角色是什麼,他們爲什麼這樣渲染?
- 27. 這是什麼JS設計模式?
- 28. 這是什麼設計模式?
- 29. 設計模式 - 這是什麼模式?
- 30. 這是什麼設計模式?
爲了防止緩衝區過載,如在C.這個想法源於LISP –