ホームページ > Java > &#&チュートリアル > Java で「Integer == Integer」が「true」を返すこともあれば、「false」を返すこともあるのはなぜですか?

Java で「Integer == Integer」が「true」を返すこともあれば、「false」を返すこともあるのはなぜですか?

Linda Hamilton
リリース: 2024-12-01 20:08:11
オリジナル
203 人が閲覧しました

Why Does `Integer == Integer` Sometimes Return `true` and Sometimes `false` in Java?

Java での整数キャッシュ

Java では、整数値を表すために Integer クラスがよく使用されます。ただし、開発者は、Integer オブジェクトを扱うとき、特にそれらを比較するときに予期しない動作に遭遇する可能性があります。

次のコード スニペットを考えてみましょう:

Integer a = 1000, b = 1000;
System.out.println(a == b); // false

Integer c = 100, d = 100;
System.out.println(c == d); // true
ログイン後にコピー

最初のケースでは、a と b は別個です。異なるオブジェクトを参照するため、誤った比較が発生します。ただし、2 番目のケースでは、c と d は同一の参照であり、真の等価性が得られます。

この動作は、-128 ~ 127 の値の Integer オブジェクトをキャッシュする Java の最適化に起因します。パフォーマンスを向上させ、メモリ フットプリントを削減するためです。 、JVM は内部的にこの範囲内の Integer インスタンスのプールを維持し、そのような値への参照は新しいオブジェクトを作成する代わりにキャッシュからインスタンスを取得します。これは、2 番目の例で c と d が同じオブジェクトである理由を説明しています。

この最適化の目的は 2 つあります。メモリの節約とキャッシュ効率の向上です。小さな整数値をキャッシュすることにより、JVM は作成される Integer インスタンスの数を最小限に抑え、メモリのオーバーヘッドを削減します。さらに、キャッシュされた値は頻繁にアクセスされる可能性が高いため、キャッシュのパフォーマンスが向上し、操作が高速化されます。

このキャッシュ メカニズムは開発者にとって重要な意味を持ちます。特に Integer オブジェクトを比較する場合、予期しない結果を防ぐには、この動作を理解することが重要です。また、Java コードにおける最適化手法とメモリ管理戦略を考慮することの重要性も強調しています。

以上がJava で「Integer == Integer」が「true」を返すこともあれば、「false」を返すこともあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート