なぜ 127 が整数定数プールの動作のマジックナンバーであるのか
Java では、整数値の定数プールの動作は、値が 127 を超えています。この動作の変更は、特に文字列定数プールの一貫した動作を考慮すると、不可解になる可能性があります。
値
整数の場合127 以下の場合、定数プールは文字列定数プールと同様に動作します。同じ値を持つ 2 つの整定定数は、定数プール内の同じオブジェクトを参照することが保証されます。これは、次の 2 つのステートメントが true を返すことを意味します。
Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2);
値の動作 > 127
ただし、整数値が 127 を超えると動作が変わります。この場合、ボックス化操作 (プリミティブ型をラッパー オブジェクトに変換する) では定数プールが使用されなくなります。代わりに、値ごとに新しい Integer オブジェクトが作成されます。その結果、次のステートメントは false を返します:
Integer i1 = 128; Integer i2 = 128; System.out.println(i1 == i2);
変更の理由
この動作の変更は、Java 仮想マシンの実装の詳細によるものです。 (JVM)。 JLS では、特定のプリミティブ値を常に区別できないオブジェクト (-128 から 127 までの整数など) にボックス化することが義務付けられていますが、このルールがその範囲を超えて適用されるかどうかは JVM 次第です。
ほとんどの JVM 127 を超える値にはこのルールを適用しないことを選択します。これは、追加のメモリ オーバーヘッドが必要になり、パフォーマンスに影響が出るからです。必要な場合にのみ Integer オブジェクトを遅延作成することにより、JVM はパフォーマンスを最適化し、メモリ消費を削減できます。
結論
整数値の定数プールのさまざまな動作を理解するのは次のとおりです。効率的で正しい Java コードを作成するために不可欠です。ボックス化操作では 127 以下の値には定数プールが使用され、それ以上の値には使用されないことを知ることで、開発者は予期しない結果を回避し、それに応じてコードを最適化できます。
以上がJava 定数プールが 127 を超える整数を異なる方法で扱うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。