由於jvm爲字符串管理字符串池,從中查找任何新的String賦值,同樣,我們是否可以開發任何其他對象或基元的池?是否可以創建類似於字符串的對象池?
5
A
回答
4
Java String常量的實習池是Java編譯器已知的,因此您無法親自模擬確切的行爲。
然而,池本身不過是一個哈希映射。如果你的對象有一個合適的標識符,你當然可以爲你自己的對象滾動一個池:簡單地創建一個靜態方法,該方法需要一個鍵,在靜態哈希映射中查找它,並且只有在沒有合併時才構建一個新對象然而。但是,請注意,在這個簡單的方案工作,你的對象是不可改變的。
3
字符串池是不是在Java中,整數和其他包裝類的唯一池/緩存使用緩存,你可以去看看整數源代碼爲例
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
相關問題
- 1. 字符串池對象創建混亂
- 2. Java字符串池對象創建
- 3. 從字符串類名創建對象
- 4. 是否可以在不創建新的String對象的情況下訪問Java字符串的子字符串?
- 5. 如何創建包含類似字符的字符串,JSON對象「:」,在Java
- 6. 創建字符串對象
- 7. 是否可以創建一組類似的類?
- 8. 是否有爲S.O.P創建的新字符串對象?
- 9. 是否可以在創建對象後獲取類型字段的類型?
- 10. 是否可以根據用戶的輸入創建類對象?
- 11. 常量池中將創建多少個字符串對象
- 12. string.toUppercase()在堆或字符串池中創建一個新對象
- 13. 是否可以將字符串轉換爲對象的引用?
- 14. 創建對象池
- 15. XCode是否爲所有空字符串創建一個對象?
- 16. 是否可以使用符號鍵創建一個const對象?
- 17. 是否可以爲接口類型創建對象
- 18. 是否可以在Doxygen中創建自定義對象類型?
- 19. 是否可以根據表示其類型的字符串值創建對象實例?
- 20. 在Javascript中創建類似於.net的字典對象
- 21. 是否可以將字符串轉換爲對象引用?
- 22. 是否可以流入TextBox或類似的控制對象?
- 23. 是否可以在PHP中實現類似數組的對象?
- 24. 是否可以從base64字符串創建一個pdf文件?
- 25. 是否可以創建字符串裝飾器?
- 26. 是否可以創建多行字符串?
- 27. 是否可以在CSS3中創建類似的陰影?
- 28. 在創建字符串對象時創建了多少對象
- 29. 是否可以從字符串中的字符創建變量名?
- 30. 是否可以根據字符串中字符的頻率創建數組?
所以基本上保持一個靜態哈希映射將複製池。對? ,這意味着池式字段的數量更少,緩存會更有效/更高效? – Ankit 2013-03-15 10:28:22
@ ay89通常,只有當您創建的對象之間存在大量重複時,池纔會有效。您可以擁有一個包含代表客戶的30個字段的對象,以及他的地址,電話號碼等。如果您只有100個客戶,那麼即使擁有大量字段的班級,您的集合也將非常有效。另一方面,如果您嘗試使用代表2D座標(整數對)的類來合併類,並將其用於一組10,000個隨機生成的座標,則緩存將不會有效,即使只有兩個領域。 – dasblinkenlight 2013-03-15 10:35:10
好的,但是如果有更多的字段數量較多的重複對象,那麼就內存而言,池化將是有效的。但同時,我認爲,它會消耗更多的時間,比較大量的字段來決定對象是否重複。對? – Ankit 2013-03-15 10:46:11