Heim >Java >javaLernprogramm >Java-Ganzzahlvergleich: Wann sollten Sie == vs. equal() verwenden?

Java-Ganzzahlvergleich: Wann sollten Sie == vs. equal() verwenden?

DDD
DDDOriginal
2024-12-21 06:41:10333Durchsuche

Java Integer Comparison: When Should You Use == vs. equals()?

Ganzzahlige Gleichheit in Java: Das Dilemma == vs. gleich enträtseln

Javas Einführung von Autoboxing in Version 1.5 ermöglichte einen bequemen Austausch von Grundelementen Typen wie int und ihre entsprechenden Wrapper-Klassen wie Integer. Eine aktuelle Beobachtung hat jedoch Fragen zur Gültigkeit der Verwendung von == für den Vergleich ganzzahliger Werte aufgeworfen.

Bedenken Sie den folgenden Code:

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null & cdiCt != cdsCt)
    mismatch = true;

Überraschenderweise würde dieser Code manchmal eine Nichtübereinstimmung auf festlegen wahr, auch wenn die Werte von cdiCt und cdsCt gleich waren. Die Verwendung eines Haltepunkts in Eclipse ergab, dass beide Ganzzahlwerte gleich 137 waren, der bedingte Ausdruck jedoch als falsch ausgewertet wurde.

Änderung der Bedingung, um stattdessen equal() zu verwenden:

if (cdiCt != null & cdiCt != null & !cdiCt.equals(cdsCt))

das Problem wurde behoben Ausgabe. Dies wirft die Frage auf: Ist es immer noch nicht ratsam, == zum Vergleich zweier Integer-Werte zu verwenden?

Die Antwort liegt im Caching von Integer-Werten durch die Java Virtual Machine (JVM). Um die Leistung zu verbessern, speichert die JVM Ganzzahlwerte zwischen -128 und 127. Das bedeutet, dass beim Vergleich zweier Ganzzahlwerte innerhalb dieses Bereichs mit == diese nur dann gleich sind, wenn sie sich auf dieselbe zwischengespeicherte Instanz beziehen.

Wenn die Werte jedoch außerhalb dieses Bereichs liegen oder nicht automatisch eingerahmt sind, werden sie als eigenständige Objekte behandelt. Dies kann zu unerwartetem Verhalten führen, wie im bereitgestellten Beispiel gezeigt.

Daher wird im Allgemeinen nicht empfohlen, sich beim Vergleich von Ganzzahlwerten auf == zu verlassen, insbesondere wenn diese den zwischengespeicherten Bereich überschreiten können oder wenn die Genauigkeit von entscheidender Bedeutung ist . Stattdessen ist die Verwendung von equal() der sicherere Ansatz, um zuverlässige Gleichheitsvergleiche sicherzustellen.

Das obige ist der detaillierte Inhalt vonJava-Ganzzahlvergleich: Wann sollten Sie == vs. equal() verwenden?. 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