美文网首页
你可能不知道的Java的Long的equals方法的秘密

你可能不知道的Java的Long的equals方法的秘密

作者: 简单即是深度 | 来源:发表于2019-05-15 00:34 被阅读0次

    之前以为equals就是值相等 , == 就是引用相等或者说绝对相等,他大多数情况下是对的,除了重写

    今天在项目中遇到这样一个问题:

    我将使用ibatis从mysql 数据库中查询返回符合条件的数据列表的size和按照某种条件更新受影响的行数(这里用Long接收)做比较,如果不相等就代表有的明细没有更新成则抛出异常,类似如下:

    List<Object> objects=xxxDao.find();

    Long count=xxxDao.updateXX(xx);

    if(!count.equals(object.size())){

    throw new RuntimeException("xxx操作失败!");

    }

    页面操作时一直失败,观察log,返回符合条件的记录数是1,update受影响的行数也是1,可是这里为什么就不相等呢,后来仔细看了一下Long的equals方法才恍然大悟:

    public boolean equals(Object obj) {

    if (objinstanceof Long) {

    return value == ((Long)obj).longValue();

        }

    return false;

    }

    一目了然!Long的equals先对要与之比较的对象进行了类型匹配,如果不是Long的实例,直接就返回false了。


    然后又趁热研究了一下Long.valueOf(1)==1 的结果是什么?

    答案是:true

    反编译获得代码为:

     Long.valueOf(1L) == 1L

    然后真正执行比较时jvm会对一侧是基本类型,一侧是包装类型的==比较进行自动拆箱,直接比较值,所以上面是true

    --其实Integer的也类似 ,至于缓存什么的,这里就不讲了。

    今天还有一个发现就是int的值的写法还有一个有意思的语法糖:int  tempInt=1_000; int还可以这么赋值,Java真好玩!

    相关文章

      网友评论

          本文标题:你可能不知道的Java的Long的equals方法的秘密

          本文链接:https://www.haomeiwen.com/subject/cezyaqtx.html