2011-08-01 37 views
4

使用Integer i = NumberUtils.INTEGER_ONE而不是Integer i = 1是否有價值?我不知道汽車拳擊背後發生了什麼。自動拳擊與靜態數字

由於

+0

像許多的優化,你應該先問;寫這個最簡單明瞭的方法是什麼?你需要一個'Integer'還是一個'int'會更簡單? –

+0

@PeterLawrey:是的,我需要一個Integer,你的「問題」就是我想問的問題。感謝您的澄清:-) –

+0

我的答案是'int i = 1;'是最簡單,最清晰和最快的。 –

回答

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這樣的事情,那麼它會開始影響性能,因爲自動裝箱會引入未緩存的整數(並不是它不會緩存整數)。與緩存整數被返回的情況不同,此語句創建一個新對象。對象創建非常昂貴並且會降低性能。

[編輯]

澄清答案