描述
如果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
Long中重写了equals方法,本质还是调用了longValue方法
//Long的equals方法
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
总结
包装类对象(Long、Integer。。)之间值的比较,使用equals方法比较,或者对应的longValue、intValue
long a = x; Long b = new Long(x); true