wie gleich-operator arbeitet mit primitiven und Objekt-Datentyp
Ich weiß, das ist eine sehr grundlegende Frage, aber ich möchte darüber im klaren sein, das Konzept. Ich möchte wissen, wie ==
- operator funktioniert im Fall von primitiven und Objekttypen. Zum Beispiel
Integer a = 1;
int b = 1;
System.out.println(a == b)
wie a
ist im Vergleich mit b
, in der Erwägung, dass a
enthalten das ref-Objekt enthält den Wert 1. Kann jemand clearify es mir, wie es intern arbeitet?
- Haben Sie einen Blick auf die Antworten zu den diese Frage, die eng miteinander zusammenhängen. Vielleicht wollen Sie auch zu Lesen auf auto-unboxing, die verwendet werden in dem code, den du zitiert hast.
- docs.oracle.com/javase/tutorial/java/data/autoboxing.html
- Möglich, Duplikat der Bei der Verwendung == für eine primitive und eine Box-Wert, ist autoboxing getan, oder ist das unboxing fertig
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen der Gleichheitsoperator in Java führt eine so genannte flach-Vergleich. In anderen Worten, vergleicht es die Werte, die Variablen enthält. Jetzt werden die Variablen von primitiven Datentypen enthält den Wert selbst, während die Referenz-Typen enthält Referenz auf heap-Bereich, welche den eigentlichen Inhalt. Das bedeutet, dass in Ihrem code-snippet
int b
wird der hold-Wert1
undInteger a
halten wird die Speicheradresse, an der der eigentliche Integer-Objekt auf dem heap.Jetzt in dem speziellen Beispiel, indem Sie es ist ein pecularity. Integer Klasse eine spezielle wrapper-Klasse, die wraps primitiven integer-Typen. Der compiler konvertiert automatisch zwischen solche wrapper-Objekte und primitive Typen (die nennt man boxing und unboxing).
Lassen Sie uns gehen Sie den code Schritt für Schritt tgo klar stellen.
Den compiler eigentlich substitue den folgenden code anstelle dieser Zeile:
Die statische Methode
valueOf
liefert ein wrapper-Objekt-Instanz, die umhüllt den angegebenen Grundwert. Dieses Verfahren, wenn der compiler erstellt eine wrapper-Klasse aus einem primitiven Typ wird als boxing bezeichnet.Wenn Sie eine solche wrapper-Objekt ist im Vergleich mit einem primitiven Variablen, die mit den Gleichheitsoperator
der compiler tatsächlich ändert es die folgenden:
wo
intValue
gibt den primitiven Wert gehüllt durch die wrapper-Objekt (das heißt unboxing), d.h. es unboxes der primitive Wert und machen der Ausdruck entspricht den Vergleich von zwei primitiven. Dies ist der Grund, warum der Gleichheitsoperator dann wiedertrue
In Ihrem speziellen Beispiel boxed Typ Integer wird ohne Verpackung in einen primitiven Typ int und
==
vergleichen primitive (d.h. wahr in Ihrem Fall).