java:equals方法

在Java库中包含150多个 equals 方法的实现,包括使用 instanceof 检测、调用 getClass 检测、捕获 ClassCastException 或者什么也不做。

String类中的 equals() 方法可以通过检测两个字符串的引用、类型、长度、字符等是否相同,来判断两个字符串是否相等。

切记:不要用 == 来比较两个字符串, == 只能确定两个字符串是否在一个位置。如果通过 new 的方式给String赋值的话,就可能会出错。

枚举类型中,在比较两个枚举类型的值时,永远不要使用 equals 方法,直接使用 “==”就可以。

Integer类型的 equals 方法比较的是数值是否相等。

Class 类保存着一些信息(Java运行时系统为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪每个对象所属的类),虚拟机为每个类型都管理一个 Class 对象,可以使用 “==”比较两个类对象。

Object这个始祖类中的 equals 方法用于检测一个对象是否等于另一个对象,主要是判断两个对象是否有相同的引用。如果我们在子类中定义equals方法时,会先调用超类的equals 方法,失败则不能相等;如果超类检测所有的域都相等,在比较子类的实例域。

 

我们平时遇到的 equals 方法比较的两种情况:

  • 在没有重写 Object的 equals 方法时,我们使用 equals 方法,判断两个对象是否相等就相当于 “==”。
  • 在重写 equals 后,通常,我们会将其复写成:两个对象内容相同时,返回true,否则就是false。

因此,博主编写了一个尽可能显得完美的 equals 方法:

 1  public boolean equals(Object otherObject){
 2         //查看参数是否为空,如果为空,返回false
 3         if(otherObject == null) return false;
 4 
 5         //查看两个对象是否有同一个引用
 6         if(this != otherObject) return false;//如果没有重写Object类中的equals方法 时,判断两个对象是否相等就等同于 “==”
 7 
 8         //查看两个对象是否属于同一个类
 9         if(getClass() != otherObject.getClass()) return false;
10 
11         //判断对象是不是由我们了解的那个类创建的对象
12         //instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
13         if(!(otherObject instanceof ClassName)) return false;
14 
15         //将otherObject强行转换为相应的类类型,对需要比较的域进行比较。 == 比较基本类型域, 使用equals比较对象域。
16         //如果所有的域都相等,则返回true,否则就是false
17         ClassName other.field1 && Objects.equals() = (ClassName)otherObject;
18         return field1 == other.field1
19                 && Objects.equals(field2,other.field2)
20                 && ...;
21 
22     }

 

博主是个初学者,有些不足之处还请指出,谢谢。

 

posted @ 2020-09-12 17:51  登天路踏歌行弹指遮天  阅读(538)  评论(0编辑  收藏  举报