equals方法和hashCode()方法

  1. 默认的hashCode()方法是什么?

    根据对象内存地址经过哈希算法转换成一个数字,可以等同看做内存地址。

  2. 重写后希望它变成什么?

  3. 为什么重写equals方法,一定要重写hashCode()方法?

    (1)当只重写前者:重写后的equals方法和默认的hashCode()方法矛盾
    (2)
    重写前:

    ​ 前者:默认比较两对象的内存地址。

    ​ 后者:默认比较两对象的哈希值(内存地址根据哈希算法得来的值)。

    public native int hashCode(); //native关键字:它的源码是C++实现的,文章下面有参考文献,
    

    重写后:

    ​ 前者:比较两对象的内容。

    ​ 后者:返回一个值(这个值是根据对象属性来计算的。也就是说,根据对象属性的值,返回一个唯一的值)

    public int hashcode(){
        final int prime = 31;
        int result = 1;
        result = prime*result + age;
        //name是string类型,也就是调用String类默认的hashcode()方法。所以:name.hashcode()就是name对象的哈希值
        result = prime*result + (name == null? 0 : name.hashcode());
        return result;//直接写age+(name == null? 0 : name.hashcode())也行就是感觉太简单了0.0
    }
    
  4. 根据hashcode的规则,两个对象相等其哈希值一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode

  5. hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值,当然你也可以重写它,hashcode方法只有在集合中用到。

  6. 对象放入集合中时,先判断hashcode是否相等,再判断equals是否相等,都相等就算是同一个对象,list则可以放入,set因为不允许重复所以不会放入。

参考:1. https://blog.csdn.net/yjclsx/article/details/50975926

​ 2. https://blog.csdn.net/bifuguo/article/details/81513526?ops_request_misc=%7B%22request%5Fid%22%3A%22163187177616780265431284%22%2C%22scm%22%3A%2220140713.130102334…%22%7D&request_id=163187177616780265431284&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-81513526.pc_search_result_control_group&utm_term=native&spm=1018.2226.3001.4187

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值