zoukankan      html  css  js  c++  java
  • Java中重写equals并重写hashcode方法的描述

     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)进行计算。

  • 相关阅读:
    本博客停止更新说明
    JavaScript备忘录(3)——正则表达式
    JavaScript备忘录(2)——闭包
    JavaScript备忘录(1)——内置类型
    CSS布局:Float布局过程与老生常谈的三栏布局
    地图投影简明笔记
    Three.js源码阅读笔记-5
    js中 set, map区别
    Package.json详解
    node.js 中的package.json文件怎么创建?
  • 原文地址:https://www.cnblogs.com/moreforests/p/13155072.html
Copyright © 2011-2022 走看看