关于使用ObjectUtils.equals方法进行参数比较出现的问题

2023-01-08 10:45:14

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了。

  • 作者:爱自由的阿彬
  • 原文链接:https://blog.csdn.net/a1029573879a/article/details/125002639
    更新时间:2023-01-08 10:45:14