Heim > Java > javaLernprogramm > Warum kann „==' in Java manchmal „Integer'-Objekte nicht korrekt vergleichen?

Warum kann „==' in Java manchmal „Integer'-Objekte nicht korrekt vergleichen?

Barbara Streisand
Freigeben: 2025-01-02 20:13:39
Original
470 Leute haben es durchsucht

Why Does `==` Sometimes Fail to Compare `Integer` Objects Correctly in Java?

Das Geheimnis der Ganzzahlgleichheit in Java

Als Java in Version 1.5 Autoboxing einführte, wurde die Verwendung von Ganzzahlobjekten mit primitiven Ints austauschbar. Es wurde jedoch beobachtet, dass die Verwendung von == zum Vergleich von Integer-Objekten zu unerwarteten Ergebnissen führen kann.

In einer verwirrenden Situation wurde festgestellt, dass Code, der == zum Vergleich von Integer-Variablen verwendet, ein boolesches Flag fälschlicherweise auf „true“ setzt wenn die Werte tatsächlich gleich waren. Durch den Wechsel des Vergleichs zu !cdiCt.equals(cdsCt) wurde das Problem jedoch behoben.

Dieses ungewöhnliche Verhalten ist auf den Caching-Mechanismus der JVM für Ganzzahlwerte zurückzuführen. Bei Werten im Bereich von -128 bis 127 verwendet die JVM zwischengespeicherte Instanzen wieder und sorgt so für eine effiziente Speichernutzung. Daher erscheinen Ganzzahlen in diesem Bereich unabhängig von ihren tatsächlichen Referenzen als identisch.

Bei Verwendung von == zum Vergleichen von Ganzzahlobjekten wird die Referenzgleichheit und nicht der Inhalt überprüft. Wenn daher die zwischengespeicherten Instanzen verwendet werden, gibt der Vergleich „true“ zurück, selbst wenn die Objektverweise unterschiedlich sind.

Dieses Problem tritt bei Verwendung der Methode „equals()“ nicht auf, da sie die Werte der Objekte vergleicht und dabei die ignoriert Referenzen. Daher wird empfohlen, equal() zum Vergleich von Integer-Objekten zu verwenden, insbesondere wenn der Wertebereich über den zwischengespeicherten Bereich hinausgehen kann oder wenn eine genaue Gleichheitsbestimmung erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum kann „==' in Java manchmal „Integer'-Objekte nicht korrekt vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage