「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java の整数定数プールが 127 を超えると異なる動作をするのはなぜですか?

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

2024 年 12 月 22 日に公開
ブラウズ:207

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 によって定義された保証範囲に起因します。予期しない結果を避けるために、開発者はこの動作の変更に注意する必要があります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3