java == für Integer [duplizieren]

8

Ich habe das folgende == Verhalten für Integer-Objekte gefunden und verstehe es nicht. (Ich bin mir durchaus bewusst, dass man für solche Vergleiche Gleichgestellte verwenden sollte, aber ich studiere für OCPJP ...)

Kurz gesagt, == funktioniert wie erwartet für 1000, aber nicht für 10.

Das frühere Code-Fragment ist:

%Vor%

und es verhält sich wie man es erwarten würde:

%Vor%

Letzteres allerdings:

%Vor%

hat die folgende Ausgabe:

%Vor%

Kann jemand bitte erklären, warum das passiert?

    
user998692 17.02.2012, 11:13
quelle

2 Antworten

11

Seit Java 5 wurde das Wrapperklassen-Caching eingeführt. Das folgende ist eine Überprüfung des Cache, der von einer inneren Klasse IntegerCache erstellt wird, die sich in dem Integer-Cache befindet. Mit dem folgenden Code wird beispielsweise ein Cache erstellt:

%Vor%

oder

%Vor%

256 Integer-Objekte werden im Bereich von -128 bis 127 erstellt, die alle in einem Integer-Array gespeichert sind. Diese Caching-Funktionalität kann durch Betrachten der inneren Klasse IntegerCache, die in Integer gefunden wird, gesehen werden:

Wenn Sie also ein Objekt mit Integer.valueOf erstellen oder einem Integer direkt einen Wert im Bereich von -128 bis 127 zuweisen, wird dasselbe Objekt zurückgegeben. Betrachten Sie daher das folgende Beispiel:

%Vor%

Die Ausgabe ist:

%Vor%

Es ist wichtig zu beachten, dass das Objekt i und p nur mit true gleichgesetzt werden, da sie das gleiche Objekt sind, der Vergleich nicht auf dem Wert basiert, sondern auf der Objektgleichheit basiert. Wenn Integer i und p außerhalb des Bereichs von -128 oder 127 liegen, wird der Cache nicht verwendet, daher werden neue Objekte erstellt. Verwenden Sie beim Vergleichen für den Wert immer die Methode ".equals". Es ist auch wichtig zu beachten, dass das Instanziieren eines Integers dieses Zwischenspeichern nicht erstellt.

Denken Sie daran, dass "==" immer für die Objektgleichheit verwendet wird, es wurde nicht zum Vergleichen von ungeperrten Werten

überladen     
Sandeep Nair 17.02.2012, 11:22
quelle
10

Siehe Integer-Wrapper-Objekte teilen die gleichen Instanzen nur innerhalb des Wertes 127? . Die Integer-Klasse hält gemeinsam genutzte statische Instanzen für gemeinsame Werte bereit.

    
Graham Borland 17.02.2012 11:15
quelle

Tags und Links