Integer-Referenzgleichheit vs. Wertgleichheit
In Java sind Grundelemente wie int und Objektwrapper wie Integer nicht austauschbar. Die Frage stellt ein Problem dar, bei dem Integer-Objekte mit gleichen int-Werten fälschlicherweise mit == verglichen werden, was zu unerwarteten wahren Ergebnissen führt.
Die Antwort liegt in der Zwischenspeicherung von Integer-Werten durch die JVM. Aus Leistungsgründen verwendet die JVM vorab zugewiesene Objekte innerhalb eines bestimmten Bereichs (-128 bis 127) wieder. Beim Vergleich von Integer-Objekten mit == prüft die JVM die Referenzgleichheit und nicht die Wertgleichheit. Für Werte innerhalb dieses zwischengespeicherten Bereichs impliziert Referenzgleichheit Wertegleichheit.
Im bereitgestellten Codebeispiel liegen die Integer-Werte jedoch außerhalb dieses zwischengespeicherten Bereichs, sodass Referenzgleichheit keine Wertegleichheit garantiert. Stattdessen sollte equal() verwendet werden, um ganzzahlige Werte auf Gleichheit zu vergleichen.
Der Stackoverflow-Link, auf den in der Antwort auf die Frage verwiesen wird, bietet weitere Einblicke in die Komplexität des Autoboxings und warum der Compiler es nicht immer „einfach zum Laufen bringen“ kann.
Zusammenfassend lässt sich sagen, dass es zwar bequem ist, == für Grundelemente zu verwenden, es ist jedoch wichtig, die Einschränkungen der Referenzgleichheit zu verstehen, wenn man mit Objekt-Wrappern wie z. B. arbeitet Ganzzahl. Für Wertgleichheitsvergleiche sollte stattdessen equal() verwendet werden.
Das obige ist der detaillierte Inhalt vonJava-Ganzzahlvergleich: Wann funktioniert „==' und wann sollten Sie „equals()' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!