2012-02-17 22 views
3

我期待通過代碼有人寫了一段時間後,不知道是否我是缺少在這裏從Integer獲取intValue,它有什麼意義嗎?

一些假設

List<Integer> runUids = new ArrayList<Integer>(); 

,後來作爲一個循環的一部分

int runUID = runUidsAL.get(i).intValue(); 

有需要在這裏調用intValue()的任何理由?不要以爲這是需要的。你做?

+0

這取決於什麼JDK版本使用。 – adatapost 2012-02-17 15:36:28

+0

runUID的類型是什麼?它是int還是Integer?什麼是jdk版本? – kosa 2012-02-17 15:36:51

+0

@thinksteep至少是JDK 5,否則他將無法使用泛型。由於至少JDK 5,自動裝箱也將可用。 – Jesper 2012-02-17 15:38:00

回答

8

你沒有這麼說,但我認爲runUID是一個int

沒有必要明確地在Integer對象runUidsAL.get(i)返回的對象上調用intValue(); Java將通過auto-unboxing自動執行此操作。

+0

但是如果runUID是一個'Integer',它會創建一個副本而不是分配參考值(在這種情況下,有點愚蠢,因爲'Integer'是不可變的,如果值在-128和127無論如何你會得到相同的參考) – 2012-02-17 15:41:43

+0

哦不,我同意 - 恕我直言,它的原因是顯示*意圖*。顯式總是更好。我只是指出,如果'runUID'是一個Integer' – 2012-02-17 15:50:11

+0

我同意,會有一些細微的差別。如果runUID是一個Integer,調用intValue()實際上是「最糟糕的」,因爲java將創建一個Integer的新實例來包裝intValue()的結果,而不是簡單地向現有的Integer實例添加另一個引用。 – 2012-02-17 16:05:38

0

例如,您可以將int分配給long,但不是Integer對象。另一方面,如果Integer對象爲null,則intValue()可能會產生NullPointerException。

+0

自動拆箱會拋出相同的'NullPointerException'。它也會快樂地將自動取消裝箱到一個「長」的位置; '整數i = 5; long l = i;' – 2012-02-17 15:48:20

1

Java 1.5及以上版本支持自動裝箱和取消裝箱,因此您可以在不使用.intValue()的情況下將Integer指定給int

1

整數是一個對象,而int是一個原語。

intValue()方法在整數類之間轉換爲其原始表示。

http://mindprod.com/jgloss/intvsinteger.html

+0

是的,但重點是,如果runUID是一個'int',由於自動拆箱,您可以在不調用intValue()的情況下得到相同的結果。 – 2012-02-17 15:43:41

+0

確實如此,但它在閱讀代碼時更加清晰。考慮代碼「if(i!= 0)」和代碼「if(i)」。它們都是平等的,但只是快速瞭解發生了什麼。就性能而言 - 自動拆箱和手動拆箱是相同的,讀取代碼更容易。 – 2012-02-17 15:49:08

+0

正如我在回答這個評論之前,你從其他答案中刪除它,我同意。然而......這不是這個答案。 – 2012-02-17 15:53:24

2

它的存在,因爲Integer擴展號碼。

Number n = new Integer(5); 

int i = n.intValue(); 

第二行可能需要n的int值,並且可能不知道n是否使用Integer或Double實例化。

0

,我一直住在幾分鐘前真實的情況:

我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()); 
} 

,這是我真實的故事:)