Long 类型判断相等
场景
在项目中,定义了一个 Integer 类型的DEFAULT_VALUE 默认值,但在查询学生数量时,定义的是Long类型,在使用equals比较相等时,与预期不符合
public class LongAndInteger {
private final static Integer DEFAULT_VALUE = 0;
public static void main(String[] args) {
Long studentCount = 0L;
System.out.println(studentCount.equals(DEFAULT_VALUE)); // false
}
}
至于为何会出现上述的结果,直接看下Long.equals()方法
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
可以看到,首先判断是否为Long 类型,如果不是,直接放回false
因为DEFAULT_VALUE 是定义的Integer类型,直接就返回了false
解决方案
① 获取Long的具体值来判断
studentCount.intValue() == DEFAULT_VALUE
② 将studentCount 定义为Integer 类型