equals和恒等(==)的区别

😏恒等(==)
1. 对于基本数据类型,==就直接判断数据值是否相等
2. 对于引用数据类型,==在判断两个对象的地址是否相同
🙂equals
  1. 如果未重写equals()方法,则其功能与恒等(==)相同。

  2. 通常子类需要重写父类的equals方法

  3. equals使用要求比较严格
    – 如果两个对象恒等于(即p1 == p2结果为true),那么equals也相等
    – 如果一个对象和NULL进行比较,结果需要返回false
    – 如果一个对象和另一个对象类型不同对象比较,结果需要返回false

  4. 重写equals()的同时也要重写HashCode()方法,重写HashCode()方法时为了使进行判断相等的两个值的HashCode相等。

class Dog{
    String name ;
    int age ;
    //重写hashCode(),不重写的话会出现equals相同,但是哈希值不同的情况
    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)//比较两个对象的地址值是否相等
            return true;
        if (obj == null)//判断传入的对象是否为null
            return false;
        if (getClass() != obj.getClass())//判断两个对象的类是否相同
            return false;
        Dog other = (Dog) obj;//将传入的对象转换成Dog类型,比较年龄和名称是否相等
            return age == other.age && Objects.equals(name, other.name);
    }
}

这段代码定义了一个名为"Pig"的类,该类具有以下属性:

  • name:一个字符串类型的属性,表示狗的名称。
  • age:一个整数类型的属性,表示狗的年龄。

该类还重写了两个方法:

  1. hashCode():该方法根据年龄和名称计算并返回猪的哈希码。
  2. equals(Object obj):该方法用于比较两个狗对象是否相等。首先判断是否是同一个对象,如果是直接返回true。然后判断传入的对象是否为null,如果为null,则返回false。接下来比较两个对象的类是否相同,如果不同则返回false。然后将传入的对象转换为Dog类型,并比较年龄和名称是否相等,如果都相等则返回true,否则返回false。

通过重写hashCode()和equals()方法,可以在需要比较或存储狗对象时进行准确的比较和哈希码计算。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值