運行下面的代碼我期望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
return true
只有當參數也是Long
。
的Javadoc說:
比較此對象與指定對象。如果 且僅當參數不爲空且爲長對象 包含與此對象相同的長整型值,則結果爲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);
'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具有長的碼:
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'是一個'int'其autoboxed爲Integer,因爲它是一個不同的類型,是不等於一長。 –
嘗試'value.equals(0L)' –