equals
来源:互联网 发布:北航网络教育好毕业吗? 编辑:程序博客网 时间:2024/05/22 14:59
1. equals()方法总结
超类Object中都由equals()这个方法,该方法主要用于比较两个对象是否相等。该方法的源码如下:
- 1
- 2
- 3
- 1
- 2
- 3
我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的内存地址,所以说使用Object的equals()方法是比较两个对象的内存地址是否相等。但是我们很多时候比较两个对象是否相等并不是看它们引用的内存地址是否相等,实际上JDK中,String、Math等封装都对equals()方法进行了重写。String的equals方法是比较两个字符串的内容是否相等,而不仅仅是比较引用的内存地址是否相等。至于其他的封装类也都差不多。
在equals()中使用getClass进行类型判断
我们在覆写equals()方法时,一般都是推荐使用getClass来进行类型判断,不是使用instanceof。我们都清楚instanceof的作用是判断其左边对象是否为其有变类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。注意后面这句话:可以用来判断继承中的子类的实例是否为父类的实现,正式这句话在作怪。我们先看如下实例:
父类:Person
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
子类:Employee
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
上面父Employee类Person和子类Employee都重写了equals()。测试程序如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
按理来说输出结果应该全部都是false,但事与愿违:结果是:true、true、false。
原因就是p1.equals(e1),是调用p1的equals方法,该方式使用instanceof关键字来检查e1是否为Person类,因为instanceof是判断其左边对象是否为其右边类的实例,也可以用来判断继承中的子类的实例是否为父类的实现。他们两者存在继承关系,肯定会返回true,而两者name又相同,所以结果肯定是true。
所以出现上面的情况是使用了关键字instanceof,这时非常容易出乱子的。故在覆写equals时推荐使用getClass进行类型判断,而不是使用instanceof
- equals
- Equals
- Equals
- equals
- equals
- Equals
- equals
- equals()
- equals
- equals()
- equals()
- equals
- ( ).equals.( )
- equals()
- equals
- Equals
- equals
- equals
- Hibernate与 MyBatis的比较
- bzoj 3730: 震波 (动态点分治)
- Javascript中的apply与call详解
- c++ 实现Student类
- 代码生成k线数据
- equals
- mybatis教程--映射之一对一查询
- Android开发:shape和selector和layer-list的(详细说明)
- 构造MaxTree
- 手机怎么解除root权限?华为手机root教程
- unity 在安卓中使用SQLite
- MYSQL存储过程&循环&游标&IF$CASE
- Android 修改VideoView的宽
- Git中全局忽略.DS_Store文件