ホームページ  >  記事  >  Java  >  -128 ~ 127 の範囲外の整数値が Java の定数プールで異なる動作をするのはなぜですか?

-128 ~ 127 の範囲外の整数値が Java の定数プールで異なる動作をするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-07 04:16:03384ブラウズ

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

127 以降の整数定数プールの動作が異なる理由

Java の数値の定数プールは文字列の定数プールとは異なります。文字列にはコンパイル時の定数のみがインターンされますが、ボックス化操作には整数のラッパー型のプールが含まれます。

例:

int x = 10;
int y = x + 1;
Integer z = y; // Not a compile-time constant
Integer constant = 11;
System.out.println(z == constant); // true

JLS は、プールされた値の狭い範囲を保証します。

実際には、ほとんどの実装はボックス化操作に Integer.valueOf を使用しており、次のような動作になります:

Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
System.out.println(x == y); // true

JLS セクションによると5.1.7:

-128 から 127 までの値は、ボックス化すると常に同一の参照を生成します。これは、共通の値が常に区別できないようにするための実際的な妥協案です。

ただし、この範囲外の値の場合は動作が変わります。効率上の理由から、実装ではこれらの値の共有参照が想定されていない場合があります。

これにより、パフォーマンスに大きな影響を与えることなく、ほとんどの状況で望ましい動作が保証されます。メモリ制限のある実装では、より広範囲の値をカバーするようにキャッシュを拡張できます。

以上が-128 ~ 127 の範囲外の整数値が Java の定数プールで異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。