Java での謎の整数ボックス化の公開
問題の Java コード スニペットは、興味深い疑問を引き起こします。2 つの Integer オブジェクトを同等のものと比較するのはなぜでしょうか。値が異なる結果をもたらす?
Large の虚偽Integers
127 より大きい整数を表す 2 つの Integer オブジェクトを比較する場合、それらの参照の比較によって等しいかどうかが判断され、結果は false になります。これは、これらのオブジェクトがメモリ内の別個のエンティティであるため、これらのオブジェクトの独特の性質から生じます。
小さな整数の背後にある真実
ただし、より小さな整数を扱う場合、異なる行動が現れます。 Java 言語仕様によれば、-128 から 127 までの整数値は同一のオブジェクトにボックス化されることが保証されています。このような値を表すボックス化されたオブジェクトは、等価演算子 (==) を使用すると一貫して true として比較されます。
区別の根拠
この区別は、実用的な妥協案であり、パフォーマンスと一貫性の間のバランス。これらの一般的に使用される値をキャッシュすると、効率的な再利用が可能になり、より複雑な値のオブジェクト ID についての仮定が回避されます。これにより、パフォーマンスを妨げることなく、ほとんどの場合に望ましい動作が保証されます。
結論
整数の等価比較の一見矛盾した動作は、Java のボクシング メカニズムの基礎となる実装に起因しています。大きな整数は独自のアイデンティティを維持しますが、小さな整数はキャッシュされたオブジェクトの恩恵を受け、一貫した等価性が保証されます。
以上がJava の整数比較では、値が等しい場合でも False が返される場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。