Java の整数定数プールが 127 を超えると異なる動作をするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-10 13:45:03
オリジナル
577 人が閲覧しました

Why Does Java's Integer Constant Pool Behave Differently Above 127?

質問: 127 における Java の整数定数プールの動作の相違

はじめに:

整数定数プールは、一般的な整数値のキャッシュを最適化してパフォーマンスを向上させる Java のメカニズムです。ただし、このプールの動作は 127 で変化を示し、開発者の間で混乱が生じています。

動作の理解:

-128 から 127 までの整数の場合、Java は、同じ定数を参照する変数の同一参照を保証します。

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); // True
ログイン後にコピー

これは、これらの値が定数プールにキャッシュされているためです。

128 での発散:

ただし、整数値が 127 を超えると動作が変わります。

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2); // False
ログイン後にコピー

これは実装の最適化によるものです。 JLS は最大 127 までの値のキャッシュを保証しますが、その範囲を超えると、実装では値を別の方法でキャッシュしたり、まったくキャッシュしないことを選択したりする場合があります。

追加の考慮事項:

偶数保証範囲 (-128 ~ 127) 内では、キャッシュ動作は常に信頼できるとは限りません。たとえば、 new Integer() を使用すると、定数プールをバイパスして新しい参照を作成できます。

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); // False
ログイン後にコピー

結論:

127 での整数定数プールの動作これは、実装の最適化と JLS によって定義された保証範囲から生じます。予期しない結果を避けるために、開発者はこの動作の変化に注意する必要があります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート