Heim  >  Artikel  >  Java  >  Warum verhalten sich ganzzahlige Werte außerhalb des Bereichs -128 bis 127 im Konstantenpool von Java anders?

Warum verhalten sich ganzzahlige Werte außerhalb des Bereichs -128 bis 127 im Konstantenpool von Java anders?

Barbara Streisand
Barbara StreisandOriginal
2024-11-07 04:16:03384Durchsuche

Why Do Integer Values Outside the Range -128 to 127 Behave Differently in Java's Constant Pool?

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!

Stellungnahme:
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