业务中判断两个Long类型值是否相等用了 ==
出现问题:不报错 判断条件结果为true 但是不走判断中的内容
原因: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);
}
即若值在[-128,127]之间,会放在缓存里面,而超过这个范围就要new 一个新的对象,也就是说==不能判断对象是否相等。自测的话比较值都比较小,会看不出来。
解决:换成A.equals(B)或A.longValue() == B.longValue()均正确