2011-07-20 49 views
0

除了語法之外,這兩種方式初始化Integer之間是否存在差異(性能,語義等)?初始化和比較整數

Integer i = new Integer(10); 
Integer i = Integer.valueOf(10); 

這兩種方法比較Integer的平等與常數是否有區別?

i.equals(CONSTANT); 
(CONSTANT).equals(i); 

回答

1

至於Java文檔的Integer.valueOf說,

返回表示指定int值一個整數實例。如果不需要 新的整數例如,這種方法一般應優先使用構造整型(INT), 因爲此方法是 可能是由 緩存經常請求的值產生顯著更好的空間和時間性能。

參數: 我一個int值。

返回: 表示i的整數實例。

時間: 1.5

5

new Integer(10)創建一個新的整數對象。

Integer.valueOf(10)可能會返回對象的實例實例。 Java保留了一個頻繁使用的整數池(通常)是小的。

i.equals(CONSTANT)CONSTANT.equals(i)只有當inull時行爲纔有所不同。我更喜歡第二種形式,因爲它更安全。

1

這個link解釋了第一個。

CONSTANT.equals(i)明顯不會丟棄NUllPointerExcpetion,除非CONSTANT爲空。

+1

......除非它是一個'null'常量。 O_O – Moonbeam

1
  1. Integer.valueOf(int)具有更好的性能,因爲它緩存值沒有-128和127

  2. 之間,除非inull。後者應該用於處理這種情況,而不是進行無關的if檢查。

3
  • new Integer(10)總是會創建一個新的Integer對象與價值10
  • Integer.valueOf(10)將返回一個Integer對象與來自池的值10(池僅包含的值的有限範圍內,這個池的外部號碼將返回一個新Integer對象以及)。

  • i.equals(CONSTANT)將拋出NullPointerExceptioninull

  • CONSTANT.equals(i)永遠不會拋出NullPointerException(假設CONSTANT是非空的static final字段,其​​equals()方法是合理的)。