2013-04-13 9 views
5

Zum Beispiel, betrachten Sie diesen Code:Was benötigt eine intValue() - Methode, wenn Wrapper Unboxing verwenden?

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

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

Wie Sie sehen können, habe ich zwei Möglichkeiten meiner ganzzahligen Wert von der Hülle zum primive Kopieren:

I Unboxing

verwenden können OR

kann ich die Methode intValue() verwenden

Also ... was ist die Notwendigkeit, ein Verfahren zu haben, wenn es bereits Unboxing?

Antwort

9

Unboxing wurde in Java 5 eingeführt. Die Wrapper (einschließlich dieser Methode) sind seit der ursprünglichen Version vorhanden.

Ein Link zum Javadoc

In dieser Zeit (1996) können wir die intValue() Verfahren haben müssen und wie Oracle rückwärts Rückwärtskompatibilität garantiert ... bis zu einem bestimmten Niveau (es ist nicht immer 100% auf Hauptversionen).

Das Verfahren hat in bleiben.

+0

So, heute nehme ich mit JDK7 es besser ist, als das Unboxing zu verwenden alt intValue(). – user1883212

+0

@ user1883212 Wie DeltaLima in seiner Antwort zeigt, kann das Boxen/Unboxing seltsame Folgen haben, solange Sie wissen, was Sie tun, fühlen Sie sich frei, eines der beiden Systeme zu benutzen. – Frank

7

Neben Frank Antwort, die eine gute historische Perspektive gibt es noch eine Notwendigkeit, die intValue() heute in einigen Situationen zu verwenden.

des folgenden pitfall bewusst sein, dass zeigt, dass Sie nicht einen Integer als int betrachten können:

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

Wer weiß, wie viele verwirrte Blicke und verkratzte Köpfe das verursacht hat. Ziemlich typisch, wenn man unerwartet in Container eindringt und versucht, die Werte zu vergleichen. Z.B. 'List A;' 'A.get (i) == A.get (i - 1)' gibt 'false 'zurück, obwohl beide Positionen' Integer (5) 'enthalten ... – AndrewJC