簡體   English   中英

為什么當相等值時Long equals返回false?

[英]Why does Long equals return false when are the same value?

運行以下代碼,我希望結果為true ,但得到的輸出為false

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

為什么Longequals比較返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM