2016-06-29 25 views
-1

Ich verwende Autoboxing und Unboxing in Java. Rückgabetyp für Autoboxing ist in Ordnung. keine Probleme. aber zum Unboxing kommt der Rückgabetyp als Integer anstelle von int. Sie finden meine Codierung unten auf und lassen Sie es mich bitte wissenRückgabetyp wird nicht als int zurückgegeben, wenn Unboxing ausgeführt wird

package JavaLearning; 

public class NumberLearning { 

    public static void main(String[] args) { 

     Integer x=5;         // AutoBoxing 

     System.out.println(x.getClass().getName());  // Display the type with the package name 

     System.out.println(x);       

     x=x+5;           // Unboxing 

     System.out.println(x.getClass().getName());  // Display the type with the package name 

     System.out.println(x); 

    } 

} 

Ausgang:

java.lang.Integer 
5 
java.lang.Integer 
10 
+0

@CSK Entschuldigen Sie mich? –

+0

Was ist die Frage? Ich bin mir nicht sicher, ob ich das verstanden habe, Sie scheinen sich selbst geantwortet zu haben: Autoboxing ist hier der Mechanismus. – Tunaki

+0

Sie zugewiesen x ist Integer-Objekt, warum denkst du, es ist Int – CSK

Antwort

0

Ihr Problem ist, dass Integer x den Objektverweis hält und wird nie zu einem primitiven zugeordnet.

Dies sollte Ihnen eine richtige Unboxing geben

int newX = x + 5; 

ein Objekt einer Wrapper-Typ (Integer) mit seinem entsprechenden primitive (int) Wert Konvertierung wird Unboxing genannt. Der Java-Compiler gilt unboxing, wenn ein Objekt einer Hüllklasse ist:

  • als Parameter an eine Methode übergeben, die einen Wert der entsprechenden Urtyp erwartet.
  • Zuordnung zu einer Variablen des entsprechenden primitiven Typs.

Source

1

Es kommt als Integer weil Sie das Ergebnis x+5 zu x sind zu speichern, die ein Integer ist, also wieder Boxen auftritt.

Um zu sehen, dass Typ ist ein int Sie sollten x+5 direkt die Art des Ausdrucks drucken, aber man kann es nicht tun, da es zu einem int unboxed ist und man kann nicht eine Methode auf einem primitiven Typ aufrufen.

0

Zuerst ist der Typ einer Variablen fest. In Ihrem Beispiel lautet der Typ xjava.lang.Integer und kann nicht in int geändert werden.

Der Test, den Sie gerade machen, ist nicht gültig; Sie werden nie den Typ von x zu etwas anderem als java.lang.Integer ändern.

Wenn Sie x = x + 5; tun, dann eine Reihe von Dingen geschehen:

  1. Die x auf der rechten Seite der = ist unboxed zu int
  2. Der Wert 5 hinzugefügt wird
  3. Das Ergebnis der +-Vorgang wird wiederum in einen Integer eingerahmt und zu x
zugeordnet
1

Die Variable x wird als Integer deklariert. Also in der Zeile x = x + 5; wird es automatisch reboxed. Wenn Sie es vermeiden möchten, verwenden Sie int y = x + 5;.Aber denken Sie daran, dass Sie .getClass() nicht auf primitiven Typen aufrufen können.

+0

Danke Kumpel. Jetzt habe ich es, wo ich den Fehler gemacht habe. Danke an alle – Ashok