zoukankan      html  css  js  c++  java
  • java里面的equals和hashcode的总结

    问题1:

    java比较两个对象,除了equals,为什么还要重写hashcode方法?

    基本类型比较,用==就可以了。

    对象比较,equals比较是对象的内存地址,hashcode比较的也是对象的内存地址的换算结果因为Object中的hashCode方法返回的是对象本地内存地址的换算结果,不同的实例对象的hashCode是不相同的)。

    有时候根据自己的业务逻辑,重写了equals,如果不重写hashcode,两个对象的内存地址肯定不一样,hashcode肯定不一样,那么两个对象肯定不一样,可能跟业务逻辑

    不符。比如本来两个对象的两个属性是一样的,这两个对象业务上应该是相等的,但是不重写hashcode,则这两个对象是不相等的,就有矛盾了。比如往HashSet里面添加对象。

    http://blog.csdn.net/jiangwei0910410003/article/details/22739953

    问题2:

    重写hashCode为什么都有31?这是做什么的?

     http://www.iteye.com/topic/257191

    http://www.iteye.com/topic/680433

    问题3:

    object自己的hashCode方法具体是怎么实现的?

    public native int hashCode();

    native关键字,是java同c语言打交道的接口

    见   http://www.enet.com.cn/article/2007/1029/A20071029886398.shtml

    好深奥,跟jvm打交道

    http://xinglongbing.iteye.com/blog/343484

    问题4:

    如果两个对象相等,则hashcode相等;如果hashcode相等,则两个对象可能相等也可能不相等。

    两个在equals的意义下相等(equal)的对象应该有相等的hash codes(但并没有说hash codes相等就一定equals)

    http://bbs.csdn.net/topics/350172637

    http://java-min.iteye.com/blog/1416727

    可以参考文档地址如下:http://aiou.iteye.com/blog/1973712

  • 相关阅读:
    《剑指Offer》二维数组中的查找
    白话计算机入门书籍--《穿越计算机的迷雾》有感
    Mysql Cluster7.5.6在 windows10 部署安装
    Mysql Cluster7.5.6 windows10 部署安装
    lll
    线程控制
    动态链接库相关知识
    二分查找及其变种简单易懂的模版
    白话 STL next_permutation 原理
    Maven本地上有包还去网上找包
  • 原文地址:https://www.cnblogs.com/usual2013blog/p/3873289.html
Copyright © 2011-2022 走看看