import java.util.*;
public class TestArrayList{
public static void main(String []args){
Student s1 = new Student("小明",15,"男");
Student s2 = new Student("小明",16,"男");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
}
}
class Student extends Object{
String name;
int age;
String gender;
public Student(String name,int age,String gender){
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public boolean equals(Object obj){
if(obj == null) return false;
if(obj instanceof Student != true) return false;
if(obj == this) return true;
if(this.name.equals(((Student)obj).name)) return true;
return false;
}
}
注意:
在重写equals的时候:需要考虑三个情况:
1. 当传入的 参数obj为null的时候,null为空地址,因此不能够调用equals,所以需要返回false
2.需要判断Student是否为Object的子类,用obj instanceof Student来实现,若不是,返回false,因为不同 类型的对象进行比较是没有任何意义的
3.如果传入的obj == this,那么就不用实现后面的判断了,自己和自己比较,肯定是return true
4.使用字符串的equals的时候,一定要进行强制类型转化,
(Student)obj.equals(),因为传入的参数是Object 类型,是父类,父类是没有equals()方法的 ,所以需要强制类型转化成student类型,才能使用equals方法进行判断