2012-07-15 14 views
27

¿Cuál es la diferencia entre ellos?¿Qué es .intValue() en Java?

l es una lista de arrays de tipo Integer.

versión 1:

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

versión 2:

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

Respuesta

41

l.get(i); volverá Integer y luego llamar intValue(); en él devolverá el número entero como tipo int.

Convertir int en Integer se llama boxing.
La conversión de una Integer a int se llama unboxing
Y así sucesivamente para la conversión entre otros tipos primitivos y sus correspondientes clases de envoltura.

Desde java 5, hará automáticamente las conversiones necesarias para usted (autoboxing), por lo que hay no hay diferencia en sus ejemplos si está trabajando con Java 5 o posterior. Lo único que tiene que cuidar es si un Integer es nulo, y lo asigna directamente a int y arrojará NullPointerException.

Antes de Java 5, el programador mismo tenía que hacer boxeo/unboxing.

+1

Antes de Java 5, el programador también necesitaría para echar a entero antes de llamar intValue. – Thilo

1

get(i) devolverá el objeto Integer y obtendrá su valor cuando llame al intValue(). En el primer caso, automáticamente ocurre auto-unboxing.

5

el objeto devuelto por l.get (i) es una instancia de la clase Entero.

intValue() es un método de instancia de la clase Entero que devuelve una primitiva int.

referencia doc

Ver Java ... http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#intValue()

+0

plus: en la versión 1, la JVM aplica el autoboxing para convertir la instancia 'Integer' en un tipo primitivo – hage

+0

¿cuál es el peligro potencial si no estoy llamando .intValue() en mi caso. – Timeless

+0

Según lo mencionado por hage, Autoboxing debería hacer lo necesario para que no se preocupe. Lea este artículo al respecto, http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html –

0

Es sólo un método de conveniencia para conseguir valor simple del objeto de Number: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html

Considere el código:

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

La última línea es un método conveniente de hacer:

float floatValue = (float)(int)integerValue; 

Dado que cualquier tipo numérico en Java se puede convertir explícitamente en cualquier otro tipo numérico primitivo, la clase Number implementa todas estas conversiones.Como de costumbre, algunos de ellos no tienen mucho sentido:

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

No debe usar 'nuevo entero (123);' Integer.valueOf (123) es recomendado. –

+1

¿Alguna razón objetiva o simplemente "ellos lo dicen"? – agibalov

+2

Caché de uso de Java para enteros, utilizando el nuevo Entero siempre crea un Objeto nuevo. Usando valueOf puedes usar el valor de la memoria caché. Esto tiene lados buenos y malos, pero en general no se requiere tener dos objetos que representen el número uno. –

0

Son exactamente lo mismo. Como han mencionado otros carteles, puede colocar el objeto Integer o la primitiva int en la matriz. En el primer caso, el compilador convertirá automáticamente el objeto Integer en una primitiva. Esto se llama auto-boxing.

+0

entonces, java convertirá entero a int automáticamente al invocar .intValue() en este caso? de una referencia al tipo de valor? – Timeless

+0

Sí, eso es correcto. – Jorn

8

Como habrás notado, intValue no es de mucha utilidad cuando ya sabes que tienes un Integer. Sin embargo, este método no está declarado en Integer, pero en la clase general Number. En una situación donde todo lo que sabe es que tiene algunos Number, se dará cuenta de la utilidad de ese método.

3

Soporte de Java dos tipos de estructuras primero son primitivas, segundo son Objetos.

El método que está solicitando se usa para recuperar el valor de Object a primitive.

Todos los tipos de Java que representan el número extienden la clase Number. De alguna manera, estos métodos están en desuso si usa el mismo tipo de objeto y primitiva dado que se implementó [autoboxing] en Java 1.5.

int - primitiva

Entero - objeto

Antes de Java 1.5 que fue la fuerza para escribir

int i = integer.intValue();

desde Java 1.5 podemos escribir

También se utilizan

Esos métodos cuando necesitamos cambiar nuestro tipo de entero a largo

long l = integer.longValue();