Java で 2 つの Long オブジェクトが等しいかどうかを判断するにはどうすればよいですか?

WBOY
リリース: 2023-04-20 21:10:06
転載
3183 人が閲覧しました

質問を投げる:

Long a = 4l;
Long b = 4l;
a == b //true
ログイン後にコピー
Long a = 128l;
Long b = 128l;
a == b //false
ログイン後にコピー

Long の値が [-127,128] の範囲にある場合、等しいかどうかを判断するために "==" を使用しても問題ありません。この範囲内にない場合は、 「==」は使用できません。その理由はソースコードで次のように説明されています:

public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
    }
ログイン後にコピー

[-127,128]の間にない場合は、新しいオブジェクトが作成されます。当然「==」が 2 つあります。オブジェクトが異なる場合、結果は false になる必要があります。

解決策:

1. 変換には Long で longValue() を使用します
Long a = 128l;
Long b = 128l;
a.longValue() == b.longValue() //true
ログイン後にコピー
2. Long で equals() を使用します
Long a = 128l;
Long b = 128l;
a.equals(b);//true
ログイン後にコピー

以下はこのメソッドのソース コード:

public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }
ログイン後にコピー

2 つの Long 型を比較す​​る際の落とし穴

一般に、2 つの基本的なデータ型を比較す​​るには「==」で十分です。Long はほとんど使用されません。型の比較。

しかし、最近プロジェクトを書いているときに、2 つの Long 型の比較に遭遇しました。その時は、二重の等号を直接使用していました。しかし、デバッグのときに、2 つの Long 型を比較す​​るためにコードを実行すると、タイプの場合は、判決本文に入力されませんでした。その後、関連する問題をオンラインで検索します。実際には非常に簡単ですが、知らないと罠に陥りやすくなります。

解決策は次のとおりです。

これを実現するには、2 つの Long 型変数でそれぞれ ==longValue()== メソッドを呼び出すことができます。

コード:

Long a=...;
Long b=...;
if (a.longValue() == b.longValue()) {
             ...;
}
ログイン後にコピー

実は、LongはJavaのデータパッケージングクラスの一種で、上記はパッケージングクラスLongを基本データ型longに変換した場合です。ボックス化されていない他のデータ パッケージング クラスのリスト。基本的なデータ型の場合:

Integer は int に変換され、intValue() メソッドを呼び出す必要があります。

Double はdouble に変換される場合は、 doubleValue() メソッドを呼び出す必要があります

Float は float に変換されます。 floatValue() メソッドを呼び出す必要があります

以上がJava で 2 つの Long オブジェクトが等しいかどうかを判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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