重写equals(Object o)方法时的注意点
-
重写equals方法的时候要注意一定要将我们的参数对象一定要考虑为空的情况
- 这里如果我们没有将我们的参数对象为空的情况排除在外,那么这个时候我们就可能会去用这个空的对象去调用一个数据进行比较,这个时候就会出现空指针异常
eg:
package 面向对象练习;
import java.util.Objects;
public class Cat {
private String name;
private int age;
public Cat(){
}
public Cat(String name,int age ){
this.name=name;
this.age=age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (getClass() != o.getClass()) return false;
/*
这个时候只是排除了我们的参数对象和模板类的类型和我们的Cat类型不一致的情况,但是并没有排除空指针的可能,这个时候
如果参数对象为null,那么这个时候就会出现空指针异常
*/
Cat cat = (Cat) o;
return age == cat.age &&
Objects.equals(name, cat.name);
}
}
class Test{
public static void main(String[] args) {
Cat cat = new Cat(“小橘”,3);
cat.equals(null);
}
}
2. 重写equals()方法一定要考虑参数对象类型和我们的本类(也就是调用类)不一致的情况
* 如果不一致就要排除,如果参数对象和我们的本类的类型都不一致,那么我们的向下转型时就会出现一个类型转换异常(ClassCastException)
eg:
```java
package equals方法;
import java.util.Objects;
public class Cat2 {
private String name;
private int age;
public Cat2() {
}
public Cat2(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o==null) return false;
/*
这个时候我们只是将我们参数为空时出现空指针的情况排除在外了,这个时候如果我们的本类对象调用equals()方法和
其他类的对象进行比较时就会出现类型转换异常(ClassCastException)
*/
Cat2 cat = (Cat2) o;
return age == cat.age &&
Objects.equals(name, cat.name);
}
}
class Test2{
public static void main(String[] args) {
Cat2 cat = new Cat2("小橘",3);
cat.equals(null);
}
}
- 最后就是我们重写equals()方法的时候一定要先从特殊情况出发,先排除特殊情况,这样可以提高程序的执行效率