Heim >Java >javaLernprogramm >Warum gibt Integer Boxing in Java bei „=='-Vergleichen manchmal „true' und manchmal „false' zurück?

Warum gibt Integer Boxing in Java bei „=='-Vergleichen manchmal „true' und manchmal „false' zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-12-23 00:50:14402Durchsuche

Why Does Integer Boxing in Java Sometimes Return `true` and Sometimes `false` for `==` Comparisons?

Die Seltsamkeiten des Integer-Boxings in Java verstehen

In Java haben primitive Datentypen wie Ganzzahlen entsprechende Wrapper-Klassen, wie z. B. Integer bieten objektorientierte Funktionalität. Wie diese Werte verpackt und entpackt werden, kann zu überraschenden Ergebnissen führen.

Eine solche Beobachtung ergibt sich aus dem folgenden Code:

public class WeirdBoxing {
    public static void main(String[] args) {
        Integer a = 1000, b = 1000;
        System.out.println(a == b);
        
        Integer c = 100, d = 100;
        System.out.println(c == d);
    }
}

Bei der Ausführung gibt dieser Code Folgendes aus:

false
true

Warum gibt der erste Vergleich „falsch“ zurück, während der zweite „wahr“ zurückgibt? Gemäß dem ==-Operator sollten Referenzen immer verglichen werden.

Das Geheimnis hinter dem „wahren“ Vergleich

Interessanterweise ist der wahre Vergleich kein Zufall. Abschnitt 5.1.7 der Java Language Specification (JLS) besagt:

Wenn der Wert p, der eingerahmt wird, [...] ein int oder eine kurze Zahl zwischen -128 und 127 ist, [...] dann seien r1 und r2 seien die Ergebnisse von zwei beliebigen Boxkonvertierungen von p. Es ist immer so, dass r1 == r2.

In diesem Fall enthalten c und d beide Werte innerhalb des angegebenen Bereichs, was dazu führt, dass ihre Boxdarstellungen (Integer-Objekte) identisch sind.

Die Mehrdeutigkeit von Vergleichen ohne festen Bereich

Im Gegensatz dazu ist der erste Vergleich (a == b) fällt nicht unter die Regel der garantierten Gleichheit. Das JLS betont Folgendes:

Für andere Werte lassen [die Regeln] keine Annahmen über die Identität der eingerahmten Werte seitens des Programmierers zu.

Im Wesentlichen gilt, wenn Werte außerhalb des festen Bereichs eingerahmt werden, Es gibt keine Garantie für die Gleichheit Referenzen.

Fazit

Das seltsame Verhalten des Integer-Boxings in Java ist darauf zurückzuführen, dass die Sprachspezifikation Effizienz und gemeinsame Anwendungsfälle vorsieht. Während Werte innerhalb eines bestimmten Bereichs garantiert identisch eingerahmt sind, ist die Identität der eingerahmten Objekte bei anderen Werten unvorhersehbar. Dieses Verständnis verdeutlicht die „Verrücktheit“, die durch den eingangs vorgestellten Codeausschnitt veranschaulicht wird.

Das obige ist der detaillierte Inhalt vonWarum gibt Integer Boxing in Java bei „=='-Vergleichen manchmal „true' und manchmal „false' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn