4
A
回答
9
基本上它會被編譯成:
Integer i = Integer.valueOf(NumberUtils.INTEGER_ONE);
假設INTEGER_ONE
被聲明爲int
。
在執行時,假設INTEGER_ONE具有值1,即實際上將返回到每次同一對象,通過Java語言規範保證的基準,因爲它是在-128至127的值之外的範圍可以返回對同一對象的引用,但不必。
0
java中的許多包裝器和實用程序類都有緩存池。 Integer使用內部緩存的'Integer'引用靜態數組來調用valueOf()方法。字符串也有類似的池。
如果你做了像Integer i = 128這樣的事情,那麼它會開始影響性能,因爲自動裝箱會引入未緩存的整數(並不是它不會緩存整數)。與緩存整數被返回的情況不同,此語句創建一個新對象。對象創建非常昂貴並且會降低性能。
[編輯]
澄清答案
相關問題
- 1. 拳擊與拆箱
- 2. 拳擊與拆箱
- 3. 類與valueTypes字段和拳擊
- 4. 自定義Spark數據源與原始字節數組 - 避免拳擊?
- 5. 靜態網格與按鈕點擊在extjs4動態數據
- 6. 拳擊拆箱
- 7. 靜態分配與動態分配與自動分配
- 8. 靜態與動態類型
- 9. 動態SQL與靜態SQL
- 10. 靜態字段+春季自動裝配
- 11. 拓寬VAR-ARGS與拳擊VAR-ARGS
- 12. VB.NET拳擊怪異
- 13. 拳擊和性能
- 14. 避免拳擊DbParameter.Value?
- 15. C#拳擊問題
- 16. 比較器的System.Enum字典無拳擊
- 17. 參數不匹配(拳擊小數點?)
- 18. 靜態塊和Field.get(空)與靜態不原始數據字段
- 19. 與靜態數據
- 20. 靜態或動態數組
- 21. 動態和靜態數組
- 22. 拳擊在數據表/拆箱和LINQ
- 23. 靜態與非靜態類
- 24. 動態類型和自定義單元格與靜態表
- 25. Java的問題與VAR-指定參數和拳擊
- 26. Android上的拳擊和UnBoxing
- 27. 拳擊類型烙鐵
- 28. 對象類型和拳擊
- 29. 拳擊原生C++指針
- 30. Java簽名零和拳擊
像許多的優化,你應該先問;寫這個最簡單明瞭的方法是什麼?你需要一個'Integer'還是一個'int'會更簡單? –
@PeterLawrey:是的,我需要一個Integer,你的「問題」就是我想問的問題。感謝您的澄清:-) –
我的答案是'int i = 1;'是最簡單,最清晰和最快的。 –