Ganzzahlvergleichsrätsel in Java: == vs. equal()
In Java 1.5 und höher können Ganzzahlen als primitive int behandelt werden Werte in vielen Szenarien. Ein aktuelles Codeproblem hat jedoch Fragen zur Gültigkeit der Verwendung des ==-Operators für Ganzzahlvergleiche aufgeworfen.
Problemstellung
Beachten Sie den folgenden Codeausschnitt:
Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true;
Dieser Code scheint die Nichtübereinstimmung auf „true“ zu setzen, wenn die Werte von cdiCt und cdsCt gleich sind. Das Problem wird deutlich, wenn man den booleschen Ausdruck untersucht: Er wird als „falsch“ ausgewertet, wenn die Werte tatsächlich gleich sind, aber irgendwie wird „Mismatch“ immer noch auf „true“ gesetzt, wenn die Ausführung fortgesetzt wird.
Auflösung
Die Lösung für dieses Problem ist die Verwendung der Methode equal() stattdessen:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
Erklärung
Der Operator == vergleicht die Speicherreferenzen zweier Objekte, während die Methode equal() deren Werte vergleicht. Bei primitiven Typen wie int funktioniert der ==-Operator wie erwartet. Bei Objekten wie Integer prüft der ==-Operator jedoch nur, ob die Referenzen auf denselben zwischengespeicherten Wert verweisen.
Aus Leistungsgründen speichert die JVM Integer-Werte zwischen -128 und 127. Daher gibt der Operator beim Vergleich zweier Ganzzahlen mit == nur dann „true“ zurück, wenn beide Werte in diesen Bereich fallen. Im gegebenen Szenario liegen die Werte wahrscheinlich knapp außerhalb dieses Bereichs, was zu unerwartetem Verhalten führt.
Schlussfolgerung
Obwohl die Verwendung von == zum Vergleichen von Grundelementen akzeptabel ist, ist dies der Fall Es wird empfohlen, die Methode equal() zum Vergleichen umschlossener Objekte wie Integer zu verwenden. Dies stellt ein konsistentes Verhalten unabhängig von den beteiligten Werten sicher.
Zusätzliche Ressourcen
Das obige ist der detaillierte Inhalt vonJava-Ganzzahlvergleich: Wann sollte ich „==' vs. „equals()' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!