質問: 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 サイトの他の関連記事を参照してください。