2012-07-15 12 views
27

Was ist der Unterschied zwischen ihnen?Was ist .intValue() in Java?

l ist eine Arraylist des Typs Integer.

Version 1:

int[] a = new int[l.size()]; 
for (int i = 0; i < l.size(); i++) { 
    a[i] = l.get(i); 
} 
return a; 

Version 2:

int[] a = new int[l.size()]; 
for (int i = 0; i < l.size(); i++) { 
    a[i] = l.get(i).intValue(); 
} 
return a; 

Antwort

41

l.get(i); werden Integer zurückkehren und dann intValue(); fordert sie auf, die ganze Zahl als Typ int zurück.

Die Umwandlung eines int zu Integer heißt boxen.
ein Integer zu int Konvertieren wird
Und so weiter für die Konvertierung zwischen anderen primitiven Typen und ihren entsprechenden Wrapper-Klassen Unboxing genannt.

Seit java 5 wird es automatisch die erforderlichen Konvertierungen für Sie (Autoboxing), so gibt es keinen Unterschied in Ihren Beispielen, wenn Sie mit Java 5 oder später arbeiten. Das einzige, worauf Sie achten müssen, ist, wenn Integer null ist, und Sie ordnen es direkt int dann wird es NullPointerException werfen.

Vor Java 5 musste der Programmierer selbst Boxen/Unboxing machen.

+1

Vor Java 5, würde der Programmierer auch vor dem Aufruf intValue zu Integer werfen müssen unsere Art von Integer ändern müssen. – Thilo

1

get(i)Integer Objekt zurück und wird seinen Wert erhalten, wenn Sie intValue() .Im ersten Fall nennen, geschieht automatisch auto-unboxing.

5

Das durch l.get (i) zurückgegebene Objekt ist eine Instanz der KlasseInteger.

intValue() ist ein Instanzmethode des Integer-Klasse, die ein primitives int zurückgibt.

Siehe Java-Referenz doc ... http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#intValue()

+0

plus: In Version 1 wendet die JVM Autoboxing an, um die 'Integer' -Instanz in einen primitiven Typ zu konvertieren. – hage

+0

Was ist das potentiell gefährlich, wenn ich in meinem Fall nicht .intValue() aufruft. – Timeless

+0

Wie von hage erwähnt, sollte Autoboxing das Notwendige tun, damit Sie sich keine Sorgen machen müssen. Lesen Sie diesen Artikel darüber, http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html –

0

Es ist nur eine bequeme Methode zum Grundwert von Objekt von Number bekommen: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html

den Code vor:

Integer integerValue = Integer.valueOf(123); 
float floatValue = integerValue.floatValue(); 

Die letzte Zeile ist eine bequeme Methode zu tun:

float floatValue = (float)(int)integerValue; 

Da jeder numerische Typ in Java explizit in einen anderen primitiven numerischen Typ umgewandelt werden kann, implementiert die Number Klasse alle diese Konvertierungen.Wie üblich, machen einige von ihnen wenig Sinn:

Integer integerValue = Integer.valueOf(123); 
int intValue = integerValue.intValue(); 
int intValue2 = (int)integerValue; 
int intValue3 = integerValue; 
+2

Sie sollten 'new Integer (123) nicht verwenden;' Integer.valueOf (123) wird empfohlen. –

+1

Jeder objektive Grund oder nur "sie sagen es"? – agibalov

+2

Java verwenden Cache für Ganzzahlen, mit neuen Ganzzahl erstellen Sie immer neue Objekt. Mit valueOf können Sie den Wert aus dem Cache verwenden. Dies hat gute und schlechte Seiten, aber im Allgemeinen ist es nicht erforderlich, zwei Objekte zu haben, die die Nummer eins repräsentieren. –

0

Sie sind genau das gleiche. Wie andere Poster erwähnt haben, können Sie entweder das Integer Objekt oder das int Grundelement in das Array setzen. Im ersten Fall konvertiert der Compiler das Objekt Integer automatisch in ein Primitiv. Dies wird Auto-Boxen genannt.

+0

Also, Java konvertiert Integer automatisch in int, indem in diesem Fall .intValue() aufgerufen wird. von einem Verweis auf Werttyp? – Timeless

+0

Ja, das stimmt. – Jorn

8

Wie Sie bemerkt haben, ist intValue nicht von großem Nutzen, wenn Sie bereits wissen, dass Sie eine Integer haben. Diese Methode ist jedoch nicht in Integer, sondern in der allgemeinen Klasse Number deklariert. In einer Situation, in der Sie nur wissen, dass Sie eine Number haben, werden Sie den Nutzen dieser Methode erkennen.

3

Java-Unterstützung zwei Arten von Strukturen sind erstens Primitiven, zweitens sind Objekte.

Die Methode, die Sie fragen, wird verwendet, um den Wert von Objekt zu primitiv abzurufen.

Alle Java-Typen, die die Nummer darstellen, erweitern die Klasse Number. Diese Methoden sind in der Regel veraltet, wenn Sie denselben Primitiv- und Objekttyp verwenden, da [autoboxing] in Java 1.5 implementiert wurde.

int - primitive

Integer - Objekt

Vor Java 1.5 wir Kraft war

int i = integer.intValue();

seit Java 1.5 zu schreiben, können wir

schreiben

Diese Methoden können auch verwendet werden, wenn wir zu lange

long l = integer.longValue();