`

java--------为什么重写equals函数的时候也要重写hashCode

阅读更多

      equals默认的比较是比较两个对象的引用是否相等,在Java里面,所有的东西都是对象,就像c++里面的指针new出来的东西,因此不可能有两个是一样的,当我们想改变这种判断准则时,则必须重写equals方法,比方说当两个对象所代表的值相等我们就认为他们相等。

      hashCode方法主要是返回这个对象在内存中的hash码,这个hash码是唯一标识这个对象的,跟着需要重写他的原因是为了常规协议,因为通常我们说,两个对象如果相等,那么他们的hash码也应该是要相等的,满足概念上的一致性,特别是在容器的应用方面,例如set, 会导致我们存储两个相等的对象(因为hashCode不同)。

      详细概念及代码,参看:

      http://blog.csdn.net/sweetanan888/article/details/8543537

分享到:
评论

相关推荐

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看String的equals源码 String重写了equals方法,引用指向同一个地址...

    探索equals()和hashCode()方法_动力节点Java学院整理

    equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。 hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的...

    equals 和 hashCode两者效果分析详解.docx

    但是为什么JavaDoc明确的告诉我们, hashCode()和equals()要一起重写呢?原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点...

    Java基础知识点总结.docx

    为什么要使用多线程 39 创建线程和启动 39 线程的生命周期 44 线程管理 45 线程同步 49 线程通信 52 线程池 58 死锁 64 线程相关类 65 十三、 同步★★★★★ 67 十四、 Lock接口 70 十五、 API 71 < java.lang >...

    AIC的Java课程1-6章

    第9章 常用类 4课时  理解Object类及其常用方法equals,hashCode和finalize等。  能够使用String,StringBuffer,StringBuilder类创建字符串对象和使用其方法,分辨不同类之间的区别。 ...

    kotlin中数据类重写setter getter的正确方法

    equals()/hashCode()函数对, toString() 函数, 输出格式为 “User(name=John, age=42)” , componentN() 函数群, 这些函数与类的属性对应, 函数名中的数字 1 到 N, 与属性的声明顺序一致, copy

    疯狂JAVA讲义

    学生提问:Java为什么要对这些数据进行缓存呢? 67 3.7.6 逻辑运算符 67 3.7.7 三目运算符 68 3.7.8 运算符的结合性和优先级 69 3.8 本章小结 70 本章练习 70 第4章 流程控制和数组 71 4.1 顺序结构 72 4.2 ...

    Java学习笔记-个人整理的

    {2.2.2}方法重写/覆盖}{50}{subsection.2.2.2} {2.3}修饰符}{51}{section.2.3} {2.4}父类对象的方法调用}{51}{section.2.4} {2.5}封装}{52}{section.2.5} {2.6}多态}{53}{section.2.6} {2.7}Sample code}{54}...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     本书非常适合Java的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Java程序员参考、查阅。 目 录 第1篇 Java语法与面向对象技术 第1章 开发环境的应用 2 1.1 Java环境 3 实例001 下载JDK开发...

    【05-面向对象(下)】

    如有必要,重写Object类中hashCode 和equals •缓存实例的不可变类:如果程序经常需要使用不可变类的实例,则可对实例进行缓存。 抽象方法和抽象类 •抽象方法和类都必须使用abstract来修饰,有抽象...

    javaSE代码实例

    14.2.2 重写hashCode方法 275 14.3 集合框架的层次结构 -277 14.4 Ordered与Sorted的接口 278 14.4.1 Ordered的排序 278 14.4.2 Sorted的排序 279 14.5 列表 279 14.5.1 列表接口——st 279 14.5.2 ...

    EpamArraysTesting

    类Object重写方法( toString() , equals() , hashCode() )。 不应在此Array类中放置任何逻辑该程序应支持以下操作: 排序数组; 搜索数组项(使用二进制搜索算法); 搜索max (最大值)和min (最小值)数组项...

    Array_Vitalij_Rusakevic

    类Object重写方法( toString() , equals() , hashCode() )。 不应在此Array类中放置任何逻辑该程序应支持以下操作: 排序数组; 搜索数组项(使用二进制搜索算法); 搜索max (最大值)和min (最小值)数组项...

Global site tag (gtag.js) - Google Analytics