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 }
博主是个初学者,有些不足之处还请指出,谢谢。