RT,正常在写代码,然后发现出了bug,采用二分排除法才找到原因:ObjectUtils.equals(a,b)这个判断出现问题了。
大概实例代码如下:
1.
        Map<String, Double> measureFlow = new HashMap<>();
        int measure = 4;
        measureFlow.put("measure",(double)measure);2.
if (ObjectUtils.equals(measureFlow.get("measure"),4)) {
    //业务代码
}就是一个方法返回Map<String,Double>类型值,然后拿到map中的measure参数和数字4比较。本来应该是true的,结果却是false。
然后源码是这样的:
public static boolean equals(Object object1, Object object2) {
        if (object1 == object2) {
            return true;
        } else {
            return object1 != null && object2 != null ? object1.equals(object2) : false;
        }
    }于是我进行测试:
System.out.println(measureFlow.get("measure")==4);返回是true,这个和源码里的object1 == object2 不是一样一样的吗?为什么源码里面就是false,我自己这样写就是true?
于是我断点看了一下,终于发现了问题:

原来,在进行比较的时候,基础类型的参数需要进行装箱,int类型的4被封装成了Integer,所以进行比较的两个对象一个是Double类型的,一个是Integer类型的,所以就是false了。