2013-04-13 8 views
5

Per esempio, guardate questo codice:Qual è la necessità di un metodo intValue() se i wrapper utilizzano unboxing?

Integer myInt = new Integer(5); 
int i1 = myInt.intValue(); 
int i2 = myInt; 

System.out.println(i1); 
System.out.println(i2); 

Come potete vedere, ho due modi di copiare il mio valore intero da wrapper al primive:

posso usare unboxing

O

posso utilizzare il metodo intValue()

Quindi ... qual è la necessità di avere un metodo quando c'è già unboxing?

risposta

9

Unboxing è stato introdotto in Java 5. I wrapper (incluso questo metodo) sono presenti fin dalla versione originale.

Un link alla Javadoc

In quel tempo (1996) abbiamo avuto bisogno il metodo intValue() e come Oracle garantisce indietro indietro compatibilità ... fino ad un certo livello (non è sempre al 100% su major release).

Il metodo deve rimanere in.

+0

Così, oggi suppongo con JDK7 è meglio usare unboxing del vecchio intValue(). – user1883212

+0

@ user1883212 Come DeltaLima mostra nella sua risposta, il boxing/unboxing può dare strani risultati, a patto che tu sappia cosa stai facendo liberamente per utilizzare uno qualsiasi dei due sistemi. – Frank

7

Oltre alla risposta di Frank, che dà una buona prospettiva storica v'è ancora la necessità di utilizzare il intValue() oggi in alcune situazioni.

essere consapevoli di quanto segue trabocchetto che mostra che non si può considerare un Integer come un int:

Integer i1 = new Integer(5); 
Integer i2 = new Integer(5); 

//This would be the way if they were int 
System.out.println(i1 == i2); //Returns false 

//This is the way for Integers 
System.out.println(i1.intValue()==i2.intValue()); //Returns true 
System.out.println(i1.equals(i2)); //Returns true 

Returns

false 
true 
true 
+0

Chissà quanti sguardi perplessi e teste graffiate questo ha causato. È abbastanza tipico imbattersi in modo imprevisto durante l'indicizzazione nei contenitori e cercare di confrontare i valori. Per esempio. 'Lista A;' 'A.get (i) == A.get (i - 1)' restituisce 'false' anche se entrambe le posizioni contengono' Intero (5) '... – AndrewJC

Problemi correlati