我期待通過代碼有人寫了一段時間後,不知道是否我是缺少在這裏從Integer獲取intValue,它有什麼意義嗎?
一些假設
List<Integer> runUids = new ArrayList<Integer>();
,後來作爲一個循環的一部分
int runUID = runUidsAL.get(i).intValue();
有需要在這裏調用intValue()
的任何理由?不要以爲這是需要的。你做?
我期待通過代碼有人寫了一段時間後,不知道是否我是缺少在這裏從Integer獲取intValue,它有什麼意義嗎?
一些假設
List<Integer> runUids = new ArrayList<Integer>();
,後來作爲一個循環的一部分
int runUID = runUidsAL.get(i).intValue();
有需要在這裏調用intValue()
的任何理由?不要以爲這是需要的。你做?
你沒有這麼說,但我認爲runUID
是一個int
。
沒有必要明確地在Integer
對象runUidsAL.get(i)
返回的對象上調用intValue()
; Java將通過auto-unboxing自動執行此操作。
但是如果runUID是一個'Integer',它會創建一個副本而不是分配參考值(在這種情況下,有點愚蠢,因爲'Integer'是不可變的,如果值在-128和127無論如何你會得到相同的參考) – 2012-02-17 15:41:43
哦不,我同意 - 恕我直言,它的原因是顯示*意圖*。顯式總是更好。我只是指出,如果'runUID'是一個Integer' – 2012-02-17 15:50:11
我同意,會有一些細微的差別。如果runUID是一個Integer,調用intValue()實際上是「最糟糕的」,因爲java將創建一個Integer的新實例來包裝intValue()的結果,而不是簡單地向現有的Integer實例添加另一個引用。 – 2012-02-17 16:05:38
例如,您可以將int分配給long,但不是Integer對象。另一方面,如果Integer對象爲null,則intValue()可能會產生NullPointerException。
自動拆箱會拋出相同的'NullPointerException'。它也會快樂地將自動取消裝箱到一個「長」的位置; '整數i = 5; long l = i;' – 2012-02-17 15:48:20
Java 1.5及以上版本支持自動裝箱和取消裝箱,因此您可以在不使用.intValue()
的情況下將Integer
指定給int
。
是的,但重點是,如果runUID是一個'int',由於自動拆箱,您可以在不調用intValue()的情況下得到相同的結果。 – 2012-02-17 15:43:41
確實如此,但它在閱讀代碼時更加清晰。考慮代碼「if(i!= 0)」和代碼「if(i)」。它們都是平等的,但只是快速瞭解發生了什麼。就性能而言 - 自動拆箱和手動拆箱是相同的,讀取代碼更容易。 – 2012-02-17 15:49:08
正如我在回答這個評論之前,你從其他答案中刪除它,我同意。然而......這不是這個答案。 – 2012-02-17 15:53:24
它的存在,因爲Integer擴展號碼。
Number n = new Integer(5);
int i = n.intValue();
第二行可能需要n的int值,並且可能不知道n是否使用Integer或Double實例化。
,我一直住在幾分鐘前真實的情況:
我Integer對象的列表。每個Integer都是我想要刪除其位置的其他列表的索引。
然後......我就是這麼做的:
for (Integer index : positionsToRemoveList) {
historyRecord.remove(index);
}
的Java打電話到下一個方法
public boolean remove(Object object);
相反的:
public E remove(int location);
我 「historyRecord」 列表WASN因爲Java正在嘗試通過Object而不是按位置來刪除它。
正確的做法是:
for (Integer index : positionsToRemoveList) {
historyRecord.remove(index.intValue());
}
,這是我真實的故事:)
這取決於什麼JDK版本使用。 – adatapost 2012-02-17 15:36:28
runUID的類型是什麼?它是int還是Integer?什麼是jdk版本? – kosa 2012-02-17 15:36:51
@thinksteep至少是JDK 5,否則他將無法使用泛型。由於至少JDK 5,自動裝箱也將可用。 – Jesper 2012-02-17 15:38:00