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 になる必要があります。
Long a = 128l; Long b = 128l; a.longValue() == b.longValue() //true
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 型変数でそれぞれ ==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 サイトの他の関連記事を参照してください。