思想: 1.先判断比较的对象是不是同一个对象,用 == 判断,如果同一对象,直接返回true 2.判断对象的类型是否一致,用 instanceof 或者getClass()方法判断,如果类型不一致,直接返回false 3.如果类型一致,将Object对象类型强转为比较对象类型(强转后才能调用成员变量) 4.比较对象成员变量的内容是否一致,字符串内容比较用equals(),这个equals方法已经官方重写过,其它内容比较用 ==。 @Override public boolean equals(Object o){//多态的思想,可以接收任何类型的对象 //判断两者类型是否一致,若不一致直接返回false,可以用instanceof来判断 if(o instanceof Student){//其中包含了o为空值的情况,o为空值时,结果自然是false Student s =(Student) o;//必须强转成学生类型,才能调用name sex age if(name.equals(s.name) && sex ==s.sex && age == s.age){ return true; }else return false; }else return false; }
//自动生成的,官方重写的equals方法 @Override public boolean equals(Object o) { //如果比较的是同一个对象,直接返回true if (this == o) return true; //如果比较的对象是空值,或者两者类型【getClass()方法获取对象的类型】不同,返回false if (o == null || getClass() != o.getClass()) return false; //如果类型相同,进行强转 Student s =(Student) o; //判断内容是否一致,直接返回结果 return sex == s.sex && age == s.age && Objects.equals(name, s.name); //Objects.equals(a,b)方法比a.equals(b)方法更加安全,Objects.equals()方法会在底层判断a是否为空值,若为空值,返回false,而在a.equals(b)方法中,若a为空值,会报错:空指针异常 }