次のコードを実行すると、結果としてtrue
と表示されますが、出力はfalse
です。同じ値のときにLongが等しい場合、falseを返すのはなぜですか?
Long value = new Long(0);
System.out.println(value.equals(0));
なぜLong
リターンfalse
のequals
比較?
次のコードを実行すると、結果としてtrue
と表示されますが、出力はfalse
です。同じ値のときにLongが等しい場合、falseを返すのはなぜですか?
Long value = new Long(0);
System.out.println(value.equals(0));
なぜLong
リターンfalse
のequals
比較?
Long.equals
戻り値true
引数がLong
の場合のみ、
のjavadocは言う:
は、このオブジェクトを指定されたオブジェクトと比較します。 で、引数がnullではなく、の場合、結果はtrueです。 にはこのオブジェクトと同じlong値が含まれています。。
実際、次のコードはtrue
を出力として取得します。実装に内部を見
Long value = new Long(0);
System.out.println(value.equals(new Long(0)));
System.out.println(value.equals((long) 0));
System.out.println(value.equals(0L);
'value.equals(0L)'もtrueを返します –
は、あなたが重要な基準を見つける方法を比較:
if (obj instanceof Long)
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
同じ値を保持していてもそう他の数値型を渡すと、falseを返します...
Integer i = 0;
と
Long l = 0L;
はその文脈では同じではありません。
Longとintを比較しました!
.equalsメソッドも変数の型をチェックしています。ここ
が長いと、INTをcampareするコードである:
int i = 0;
long l = 0L;
//v1
System.out.println(i == l);
//v2
Long li = new Long(i);
Long ll = new Long(l);
System.out.println(li.eqauls(ll));
//v3
System.out.println(((long)i) == l);
'0'は、異なるタイプである限りに等しくない整数にautoboxedれる 'int'あります。 –
'value.equals(0L)'を試してください –