先来看一下官方API中对Object类的equals()方法的介绍:
equals
public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
参数:
obj
- 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true
;否则返回 false
。
通俗的讲,就是将某个对象和引用对象比较是否相等,相等返回true否则返回false。其实际作用是判断两个对象的参数是否一样。
使用equals()时有两种情况:
1、当定义一个类时,若没有重写equals()方法,则调用父类Object的equals()方法,即判断两个对象的地址是否一样。
下面的代码是equals()的源码
public boolean equals(Object obj) {
return (this == obj);
}
2、当重写equals()方法时,重写为判断两个对象的参数是否一致。
public class AnimalDemo {
public static void main(String[] args) {
Cat ss = new Cat(1, 2);
System.out.println(ss.equals(new Cat(1, 2)));
}
}
当Cat方法没有重写equals()方法时,只要两个对象的引用地址不同,就返回为true。
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cat other = (Cat) obj;
if (a != other.a)
return false;
if (b != other.b)
return false;
return true;
}
重写Cat的equals()方法时,返回true。
这里有一个细节,equals(Object obj)的引用对象为Object类,而实际引用的均为Object的子类,即子类的上转型对象。
在equals()重写方法中Cat other = (Cat) obj;
意思是将obj下转型为Student类,如果此时obj是一个和Dog,那么没有办法下转型为一个Cat,则需要先判断obj是否为该类的对象。此处也可以使用obj instanceof Cat来判断obj是否为Cat的对象。