2017-04-24 73 views
0

運行下面的代碼我期望true作爲結果,但我得到的輸出是false爲什麼Long值等於相同的值時返回false?

Long value = new Long(0); 
System.out.println(value.equals(0)); 

爲什麼的Long回報falseequals比較呢?

+2

'0'是一個'int'其autoboxed爲Integer,因爲它是一個不同的類型,是不等於一長。 –

+3

嘗試'value.equals(0L)' –

回答

4

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); 
+0

'value.equals(0L)'也將返回true –

3

在執行裏面找比較方法,你會發現關鍵標準:

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; 

在這種情況下是不一樣的。

0

比較了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); 
相關問題