美文网首页
你可能不知道的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方法的秘密

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

  • java-equals方法

    equals equals 方法是 java.lang.Object 类的方法。java默认的equals方法是比...

  • Java 比较相等

    Java Equals() 特性 Equals() 和 == 的区别 重写Equals方法 重写HashCode方法

  • 重写equals 方法的注意事项

    java.lang.Object 中的equals方法如下 什么时候需要重写equals方法 使用equals方法...

  • JAVA面试题汇总

    (一) java基础面试知识点 java中==和equals和hashCode的区别int、char、long各占...

  • Java for Android 面试题

    (一) java基础面试知识点 java中==和equals和hashCode的区别 int、char、long各...

  • Java的equals()方法

    经过几天的学习,终于对equals的用法有了比较全面的认识,并做一个总结。 1.equals的本意——即在Obje...

  • Interview之一:hashCode 与equals

    1、hashCode 与 equals Java中的equals方法和hashCode方法是Object中的,所以...

  • JAVA基础

    java基础 equals实现 object的方法 clone,equals,notify,notifyall,h...

  • equals与hashCode方法

    两个方法介绍 equals 方法 equals 方法是 Object 类自己实现的一个方法,因此每个 Java 类...

网友评论

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

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