equals和“==”的不同
equals方法是Object类的方法,Object是所有类的父类,即equals方法是任何类都可以使用的。
Object类中的equals方法将确定两个对象引用是否相等,即point1和point2是否指向同一个对象。而“==”是判断值是否相等,常用于基本数据类型。
为什么要覆写equals方法
object类中的equals方法有它的缺点,只能判断是否引用了相同对象,不能判断对象的状态是否相同。
例如,point1和point2指向的对象不同,point1.equals(point2)返回值是false。
要想判断对象的状态,如对象的姓名是否相同,就要覆写equals方法。
容易忽视的一个错误
Object类的equals方法的显式参数是Object类型,若你覆写的equals方法的显式参数类型不是Object,你则定义了一个无关的方法。
即public boolean equals(Object otherObject)中的Object 被你换成了其他类型。
怎样写出优美的equals方法
public boolean equals(Object otherObject) {
//判断引用是否相同
if(this == otherObject) return true;
//判断参数是否为空
if(otherObject == null) return false;
//判断对象的类型是否相同
if(getClass() != otherObject.getClass()) return false;
//将引用参数强制转化成对应类型
var other = (Employee)otherObject;
//判断对象的状态是否相同
return Objects.equals(name,other.name) && (this.Salary == other.Salary);
}