hashCode()和equals()

为什么重写 equals 时必须重写 hashCode 方法?

  1. 如果equals()比较对象的内容相同时,则HashCode一定相等。

  2. 如果两个对象的HashCode相等,那么他们的equals()不一定相等。

    public static void main(String[] args) {
        Integer IntA=97;
        String a="a";
        System.out.println(IntA.hashCode());//97
        System.out.println(a.hashCode());//97
        System.out.println(a.equals(IntA));//false
    }
  • 重写之前的equals()源代码用的是==比较,比较的是地址,所以当equals()相同时,hashcode一定相同。
public boolean equals(Object obj) {
    return (this == obj);
}
  • 重写后的equals()函数比较的是内容,hashcode()不一定相同,为了遵循第一条和第二条准则,需要重写hashcode(),使他们也拥有一样的hashcode()。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值