1.什么是equals方法?
equals() 方法用于将字符串与指定的对象比较。
语法:public boolean equals(Object anObject)
返回值:如果给定对象与字符串相等,则返回 true;否则返回 false。
2.什么时候应当重写对象的equals方法?
一般在需要进行值比较的时候,是需要重写对象的equals方法的。
在Java中,每个对象都继承于Object.如果不重写,则默认的equals代码如下所示:
public boolean euqals(Object obj){
return this == obj;
}
equal默认是使用“==”来判断两个对象是否相等。
两个对象使用“==”比较的是对象的地址,只有两个引用指向的对象相同的时候,“==”才返回true。
3.重写equals方法,比较两个对象
比较两个对象整体的内容,要重写对象的equals方法
public static void main(String[] args){
Person p1 = new Person();
p1.setName("zhangsan");
p1.setGender("三");
p1.setAge(22);
Person p2 = new Person();
p2.setName("zhangsan");
p2.setGender("三");
p2.setAge(22);
System.out.println(p1.equals(p2));
}
重写Person的equals方法
@Override
public boolean equals(Object obj) {
if(this == obj){//引用的地址完全一样
return true;
}
if(obj == null){//obj是空的
return false;
}
if(getClass()!=obj.getClass()){//两者类型不一样
return false;
}
Person p = (Person)obj;//强制类型转换,比较属性
return name.equals(p.name)
&&gender.equals(p.gender)
&&age == p.age;
}
4.常见equals方法实现错误
public class Employee {
public boolean equals(Employee other) {
return Objects.equals(name, other.name) && salary ==other.salary && Objects.equals(hireDay, other.hireDay);
}
这个方法声明的显示参数类型是Employee,结果并没有覆盖Object中的equals方法,而是定义了一个完全无关的方法.为了避免发生类型错误,可以使用@override对覆盖超类的方法进行标记。