拋出問題:
Long a = 4l;
Long b = 4l;
a == b //true
Long a = 128l;
Long b = 128l;
a == b //false
如果Long的值在[-127,128]之間,用“==”判斷是否相等是沒問題的,如果不在這個區間,是不能用“==”的,原因如下源碼解釋:
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);
}
如果不在[-127,128]之間,則會new一個新對象,自然“==”兩個不同的對象,其結果必然是false了。
解決方案:
1、使用Long中的longValue()進行轉換
Long a = 128l;
Long b = 128l;
a.longValue() == b.longValue() //true
2、使用Long中的equals()
Long a = 128l;
Long b = 128l;
a.equals(b);//true
下面是該方法源碼:
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}