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

  • 相关阅读:
    Linux主要shell命令详解(下)
    mget命令, ftp命令详解
    VI 基本可视模式
    vim使用技巧
    cd及目录快速切换
    du命令解决linux磁盘空间满的问题(很不错的哦)
    Mysql删除数据后磁盘空间未释放的解决办法【转】
    MYSQL-innodb性能优化几个点
    Apache服务器出现Forbidden 403错误提示的解决方法总结
    MySQL 分区表原理及数据备份转移实战
  • 原文地址:https://www.cnblogs.com/usual2013blog/p/3873289.html
Copyright © 2011-2022 走看看