ホームページ >Java >&#&チュートリアル >Java で「整数」の等価性が時々「false」を返すのはなぜですか?

Java で「整数」の等価性が時々「false」を返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 03:08:13301ブラウズ

Why Does `Integer` Equality Sometimes Return `false` in Java?

Java での整数キャッシュ: 最適化について

最近の観察により、Java での整数オブジェクトの動作に関する混乱が生じています。コード例は、等価演算子が 1000 に等しい 2 つの Integer インスタンスの場合は「false」を返し、100 に等しい 2 つのインスタンスの場合は「true」を返すことを示しています。

この一見矛盾は、Java の整数のキャッシュ メカニズムに由来しています。パフォーマンスを最適化し、メモリ フットプリントを削減するために、Java 仮想マシン (JVM) は、-128 ~ 127 の値の Integer オブジェクトをキャッシュします。これは、この範囲内の Integer インスタンスへの参照が常に同じであることを意味します。

したがって、 2 番目のコード スニペットでは、Integer インスタンスが値 100 を表し、「c」と「d」の両方が同じキャッシュされたオブジェクトを指しており、結果は「true」になります。それらの同等性を比較するとき。ただし、この範囲外の値 (1000 など) の場合は、異なる Integer オブジェクトが作成されるため、比較結果は「偽」になります。

この最適化は、メモリ使用量を削減することでパフォーマンスに影響を与え、キャッシュの使用効率を高めます。また、頻繁に使用される整数の新しいオブジェクトを作成するオーバーヘッドも排除され、コードの実行が高速化されます。

このトピックに関するさらなる研究は、次のリソースで見つけることができます。

  • [Oracle の Java]パフォーマンスのチューニングガイドライン](https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-tuning-6.html#integer_caching)
  • [Java および C における整数演算の最適化] ](https://coincidental.com/research/number-boxes.pdf)

以上がJava で「整数」の等価性が時々「false」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。