Warum sich das Verhalten des Integer-Konstantenpools nach 127 unterscheidet
Der Konstantenpool für Zahlen in Java unterscheidet sich von dem für Strings. Während für Zeichenfolgen nur Konstanten zur Kompilierungszeit interniert werden, bezieht jede Boxoperation den Pool für Wrapper-Typen von Ganzzahlen mit ein.
Zum Beispiel:
int x = 10; int y = x + 1; Integer z = y; // Not a compile-time constant Integer constant = 11; System.out.println(z == constant); // true
Das JLS garantiert einen kleinen Bereich gepoolter Werte , wobei Implementierungen die Möglichkeit haben, einen größeren Bereich zu verwenden.
In der Praxis verwenden die meisten Implementierungen Integer.valueOf für Boxing-Operationen, was zu folgendem Verhalten führt:
Integer x = Integer.valueOf(100); Integer y = Integer.valueOf(100); System.out.println(x == y); // true
Laut JLS-Abschnitt 5.1.7:
Werte zwischen -128 und 127 ergeben beim Boxen immer identische Referenzen. Dies ist ein praktischer Kompromiss, der sicherstellt, dass gemeinsame Werte immer nicht unterscheidbar sind.
Allerdings ändert sich das Verhalten für Werte außerhalb dieses Bereichs. Aus Effizienzgründen gehen Implementierungen möglicherweise nicht von gemeinsamen Referenzen für diese Werte aus.
Dies gewährleistet in den meisten Situationen das gewünschte Verhalten, ohne die Leistung wesentlich zu beeinträchtigen. Implementierungen mit begrenztem Speicher können das Caching erweitern, um einen größeren Bereich von Werten abzudecken.
Das obige ist der detaillierte Inhalt vonWarum verhalten sich ganzzahlige Werte außerhalb des Bereichs -128 bis 127 im Konstantenpool von Java anders?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!