码迷,mamicode.com
首页 > 编程语言 > 详细

Java中重写equals并重写hashcode方法的描述

时间:2020-06-19 22:32:55      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:lazy   obj   alt   数值   string   mamicode   img   结果   get   

 1.两个对象的hashCode()相同,equals()不一定为true

(1)重写equals()的同时,重写hashCode()

  a.定义Person类,私有属性name,age;有参构造,set/get方法;

  技术图片

  b.重写equals()、hashCode()方法

  技术图片

  c.测试:

  技术图片

  d.运行结果:  

  技术图片

 结论

  1.如果两个对象的hashcode值相等,有两种情况:

    a.两个对象是同一个对象,执行equals()中if(this==o);

    b.两个对象计算得出的hashcode值相同,发生了hash冲突。

  综合代码示例得出:两个对象的hashCode()相等时,其equals()不一定相等(需注意hashcode的重写规则)。

 

  2.如果两个对象的equals为true,则其hashcode值也必然相同

    a.两个对象是同一个对象,使用==进行地址比较;    

    b.equals()中,return返回的是age属性的地址比较以及使用Objects类中的equals方法进行比较;

      1)Objects类中的equals方法

      技术图片

       2)Object类中的equals方法

      技术图片

    可以得出,equals()中返回值的比较实际是进行地址比较,当equals()相等时,说明这两个对象是同一个对象,则其hashcode使用相同方法计算得出的值也相同。

  综合示例得出: 如果两个对象的equals为true,则其hashcode值也必然相同。

  对象的hashCode()计算:以Person类为例,其中age是int类型,其hashcode值就是其数值大小;name是String类型,其通过hash(name)进行计算。

 

Java中重写equals并重写hashcode方法的描述

标签:lazy   obj   alt   数值   string   mamicode   img   结果   get   

原文地址:https://www.cnblogs.com/moreforests/p/13155072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!