![](/img/trans.png)
[英]Why does the equals() method return false when the two objects are identical?
[英]Why does Long equals return false when are the same value?
運行以下代碼,我希望結果為true
,但得到的輸出為false
。
Long value = new Long(0);
System.out.println(value.equals(0));
為什么Long
的equals
比較返回false
?
僅當參數也是Long
Long.equals
返回true
。
Javadoc說:
將此對象與指定對象進行比較。 當且僅當參數不為null且是一個Long對象,並且包含與此對象相同的long值時,結果才為true。
事實上,以下代碼獲取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);
在已實現的compare方法中查看,您將發現關鍵條件:
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長整型的代碼:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.