2013-04-13 4 views
5

Na przykład, spójrz na ten kod:Jaka jest potrzeba metody intValue(), jeśli opakowania są rozpakowywane?

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

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

Jak widać, mam dwa sposoby kopiowania moją wartość całkowitą od owijki do primive:

mogę używać unboxing

OR

mogę użyć metody intValue()

Więc ... co potrzeba posiadania metodę, gdy istnieje już rozpakowywanie?

Odpowiedz

9

Unboxing został wprowadzony w Javie 5. Owijarki (w tym ta metoda) były tam od pierwotnej wersji.

Link do Javadoc

W tym czasie (1996) my potrzebujemy metody intValue() i jak Oracle gwarantuje kompatybilność wstecz wstecz ... aż do pewnego poziomu (nie zawsze jest w 100% na głównych wydaniach).

Metoda ma na pobyt.

+0

Więc dzisiaj Przypuszczam ze JDK7 lepiej wykorzystywać unboxing niż stara intValue(). – user1883212

+0

@ user1883212 Tak jak pokazuje DeltaLima w swojej odpowiedzi, boks/odpakowanie może dać dziwne wyniki, o ile wiesz, co robisz, możesz swobodnie używać dowolnego z obu systemów. – Frank

7

Oprócz odpowiedzi Franka, który daje dobre perspektywy historycznej istnieje nadal potrzeba użyć dzisiaj intValue() w niektórych sytuacjach.

Należy pamiętać o następującej pułapki, który pokazuje, że nie można uważać dany Integer jak 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

Kto wie, ile zdumionych spojrzeń i porysowanych głów spowodowało. Dość typowe, aby uruchomić się w nieoczekiwany sposób podczas indeksowania w kontenerach i próbować porównać wartości. Na przykład. 'List A;' 'A.get (i) == A.get (i - 1)' zwraca 'fałsz' mimo, że obie pozycje zawierają' Integer (5) '... – AndrewJC

Powiązane problemy