Java Long類型對比分析

Java Long類型對比

在開發的到一個很基礎的問題

在代碼中,兩個Long類型數據比較用“==”,結果有時候true有時候false,原本以為Long會自動轉long然後再比較,不會是這裡的錯,找來找去實在找不到其他原因瞭,我就打印這兩個Long類型出來看,果然是不相等,於是臉黑瞭一陣……

去查瞭一下資料,原來是這樣:

Java 基本類型的包裝類的大部分都實現瞭常量池技術,即Byte,Short,Integer,Long,Character;

這5種包裝類默認創建瞭數值[-128,127]的相應類型的緩存數據,但是超出此范圍仍然會去創建新的對象。

所以

當Long型的值超過瞭【-128,127】的時候,他會new一個新的對象,如果沒有超過就會放到緩存中。

所以當Long型的值超過瞭【-128,127】的時候,“==”判斷就不會相等瞭,可以理解為此時“==”比較的是兩個對象的地址而不是值。

Long class源碼:

public static Long valueOf(long l) {
    final int offset = 128;
    if (l >= -128 && l <= 127) { // will cache
        return LongCache.cache[(int)l + offset];
    }
    return new Long(l);
}

正確的Long類型比較姿勢:

1.使用Long的longValue()方法,轉換成long值進行比較

Long a = 128l;
Long b = 128l;
a.longValue() == b.longValue(); //true

2.使用Long的equals()方法

Long a = 128l;
Long b = 128l;
a.equals(b); //true

Long class 源碼:

public boolean equals(Object obj) {
    if (obj instanceof Long) {
        return value == ((Long)obj).longValue();
    }
    return false;
}

java Long型和long型的比較大小

一、Long數據的大小的比較

對於Long類型的數據,這個數據是一個對象,所以對象不可以直接通過“>”,“==”,“<”的比較,如果要比較兩個對象的是否相等的話,我們可以用Long對象的.equals()方法:

二、long數據的大小的比較

對於long類型的數據,這個數據是一個基本數據類型,不屬於對象,所以可以直接通過“>”,“==”,“<”作比較

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: