重写equals()方法时的注意点[java]

重写equals(Object o)方法时的注意点

  1. 重写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);
       } 
   }
  1. 最后就是我们重写equals()方法的时候一定要先从特殊情况出发,先排除特殊情况,这样可以提高程序的执行效率
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值