除了語法之外,這兩種方式初始化Integer
之間是否存在差異(性能,語義等)?初始化和比較整數
Integer i = new Integer(10);
Integer i = Integer.valueOf(10);
這兩種方法比較Integer
的平等與常數是否有區別?
i.equals(CONSTANT);
(CONSTANT).equals(i);
除了語法之外,這兩種方式初始化Integer
之間是否存在差異(性能,語義等)?初始化和比較整數
Integer i = new Integer(10);
Integer i = Integer.valueOf(10);
這兩種方法比較Integer
的平等與常數是否有區別?
i.equals(CONSTANT);
(CONSTANT).equals(i);
至於Java文檔的Integer.valueOf說,
返回表示指定int值一個整數實例。如果不需要 新的整數例如,這種方法一般應優先使用構造整型(INT), 因爲此方法是 可能是由 緩存經常請求的值產生顯著更好的空間和時間性能。
參數: 我一個int值。
返回: 表示i的整數實例。
時間: 1.5
new Integer(10)
創建一個新的整數對象。
Integer.valueOf(10)
可能會返回對象的實例實例。 Java保留了一個頻繁使用的整數池(通常)是小的。
i.equals(CONSTANT)
和CONSTANT.equals(i)
只有當i
是null
時行爲纔有所不同。我更喜歡第二種形式,因爲它更安全。
這個link解釋了第一個。
CONSTANT.equals(i)
明顯不會丟棄NUllPointerExcpetion
,除非CONSTANT
爲空。
Integer.valueOf(int)
具有更好的性能,因爲它緩存值沒有-128和127
之間,除非i
是null
。後者應該用於處理這種情況,而不是進行無關的if
檢查。
new Integer(10)
總是會創建一個新的Integer
對象與價值10
。Integer.valueOf(10)
將返回一個Integer
對象與來自池的值10
(池僅包含的值的有限範圍內,這個池的外部號碼將返回一個新Integer
對象以及)。
i.equals(CONSTANT)
將拋出NullPointerException
當i
是null
。
CONSTANT.equals(i)
永遠不會拋出NullPointerException
(假設CONSTANT
是非空的static final
字段,其equals()
方法是合理的)。
......除非它是一個'null'常量。 O_O – Moonbeam