一、问题

  在我们新建java对象的时候,如果后期用到对象比较,就必须重写equals(0、hashcode()方法

  为什么必须重写这两个方法?

  只是比较相等的话,重写equals()方法不就可以吗?为什么还要重写hashcode()方法?

  参考文章:【http://blog.csdn.net/zhangqindabendan/article/details/54800303】

二、分析

  (1)必须重写【equals()】的原因:

    Object类比较对象相等的原理是:

      【比较相等的两方指向同一对象】  

      【对于任何非空引用值 x 和 y ,当且仅当 x 和 y 引用同一对象(同一块内存地址),此方法才返回 true】 

    实际比较相等时:

      【我们认为保存数据相同的对象就相等,不关心是否同一内存地址】

      【new出来的对象内存地址永远不相同】

  (2)必须重写【hashcode()】的原因:

    hashcode()方法的常规协定:该协定声明相等的对象必须具有相等的哈希码

      【当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true】

      【当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false】

    没有重写该方法的后果:

      【某些利用对象hashcode值做为索引的情况下,会造成混乱,相当于没有重写equals方法】

  (3)equals()方法重写规定:

      【自反性、对称性、传递性、一致性】

    

      

    

Object重写equals()、hashcode()方法的原因的更多相关文章

  1. 内存泄漏避雷!你真的了解重写equals()和hashcode()方法的原因吗?

    基本概念 要比较两个对象是否相等时需要调用对象的equals() 方法: 判断对象引用所指向的对象地址是否相等 对象地址相等时, 那么对象相关的数据也相等,包括: 对象句柄 对象头 对象实例数据 对象 ...

  2. equals(),hashcode()方法详解

    Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals ...

  3. Java基础知识强化26:Object类之hashCode()方法、getClass()方法

    1. Object类的hashCode()方法,如下: public  int  hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...

  4. equals(),hashcode(),克隆学习心得

    equals(),hashcode(),克隆学习心得 其实在开发时候,很少去重写equals(),hashCode()方法,但是有些时候业务需要还是要重写. 注意: 重写equals()方法一定要重写 ...

  5. Effective Java 第三版——11. 重写equals方法时同时也要重写hashcode方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  6. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

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

    原文地址:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html 首先我们先来看下String类的源码:可以发现Stri ...

  8. 为什么重写equals时必须重写hashCode方法?(转发+整理)

    为什么重写equals时必须重写hashCode方法? 原文地址:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html ...

  9. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

    在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { priva ...

随机推荐

  1. redis.conf 具体配置详解

    redis.conf 具体配置详解 # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => ...

  2. 贪心——HDU-5969 最大的位或

    HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969 一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起 ...

  3. HTTPS科普扫盲

    为什么需要HTTPS HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...

  4. cenos 安装hadoop

    1 创建hadoop用户 2 下载jdk和hadoop安装包 3 在root用户下解压jdk到/usr/java 4 配置JAVA_HOME 编辑/etc/profile,在文件最后添加 # set ...

  5. SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑

    习惯使用jpa操作对象的方式,现在用mybatis有点不习惯. 其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO. 没办法,自己搞喽! 这里主要是实现了通过代码自动生成my ...

  6. [LuoguP1363]幻想迷宫

    [LuoguP1363]幻想迷宫(Link) 现在有一个迷宫,从迷宫边界的任意一点可以走到对面,即:若都是路面,则可以从\((1, i)\)走到\((N, i)\).其余情况依旧.问是否可以从指定的起 ...

  7. 用javascript调用表单验证事件时,为什么return false了还是把表单submit了?

    表单提交前,都会有定义一个验证的方法以对用户提交的内容进行限定,今天写到了这个,但出现了一个好郁闷的东西,就是一点提交了,调用我自己写的一个CheckForm()方法时,我明明写了return fal ...

  8. 转 Grand Central Dispatch 基础教程:Part 1/2 -swift

    本文转载,原文地址:http://www.cocoachina.com/ios/20150609/12072.html 原文 Grand Central Dispatch Tutorail for S ...

  9. DBA手记(学习)-RAC环境下GES TX报警情况处理

    GES ... TX-... GES的全称是Global Enqueue Service,用于RAC环境的全局共享队列.从提示信息可以看出,目前的锁定是DML引发的行级锁(TX). 检查v$lock_ ...

  10. Qt绘制动态曲线

    首先*.pro文件中加一句 QT += charts 然后 mainwindow.cpp文件如下: #include "mainwindow.h" #include "u ...