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方法的描述的更多相关文章

  1. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  2. HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法

    import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(Strin ...

  3. Hibernate中为什么要重写equals方法和hashcode方法

    1.*为什么要重写equals方法,首先我们来看一下equals源码: public boolean equals(Object anObject) { if (this == anObject) { ...

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

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

  5. Java重写equals方法和hashCode方法

    package com.ddy; public class User {     private Integer id;     private String name;     private St ...

  6. HashSet中的元素必须重写equals方法和hashCode方法

    http://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html 1.为什么必须重写这两个方法. 2.什么事hashSet去重,符合什么样的 ...

  7. 对象作为 map 的 key 时,需要重写 equals 方法和 hashCode 方法

    对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没有重写 hashCode 方法,那么下面的代码示例会输出 null 我们首先定义一个对象:BmapPoint, ...

  8. 浅谈Java中的equals和==与hashCode

    转载:https://www.cnblogs.com/dolphin0520/p/3592500.html 参考:http://blog.csdn.net/yinzhijiezhan/article/ ...

  9. java中==和equals的不同使用方法

    System.out.println("input a charact a      "); Scanner input2 = new Scanner(System.in); St ...

  10. Java中的equals和hashCode方法

    本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...

随机推荐

  1. vue项目之主页布局

    1.背景 2.基本结构 代码: <template> <el-container class="home-container"> <!-- 头部--& ...

  2. vue 识别\n \t 等字符(转载)

    使用.text(str)时,str中有"\n",但是页面显示却没有换行,需要在所在的 div添加属性 style="white-space: pre-line" ...

  3. 掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置

    title: 掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置 date: 2024/8/11 updated: 2024/8/11 author: cmdrago ...

  4. .NET 网络唤醒

    本文介绍下电脑设备关机的情况下如何通过网络唤醒设备,之前电源S状态 计算机Power电源状态- 唐宋元明清2188 - 博客园 (cnblogs.com) 有介绍过远程唤醒设备,后面这俩天了解多了点所 ...

  5. Linux下载安装jdk1.8

    Linux下载安装jdk1.8 一.下载 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=a ...

  6. CSS & JS Effect – sticky horizontal scrollbar

    需求 这个是 Google Ads 里的 table. 那个 horizontal scrollbar 可以 sticky bottom. 我们知道 scrollbar 是游览器原生的,我们能做的 s ...

  7. 暑假集训CSP提高模拟7

    这个 T1 的 \(n^{3}\) 的 SPJ 效率还是太慢了,膜拜 SPJ 大神学长,还会画画 A.Permutations & Primes 这题感觉挺水的但是感觉有不是那么水,主要还是因 ...

  8. 通过MobaXterm操作远程服务器电脑的方法

      本文介绍在Windows电脑中,下载.配置MobaXterm软件,从而连接.操作远程服务器的方法.   因为是在Windows操作系统的电脑中连接服务器,所以建议使用MobaXterm.PuTTY ...

  9. 智能化IT运维平台建设方案,基于智和信通运维体系的高敏捷二次开发

    随着企业信息进程不断加速,运维人员需要面对越来越复杂的业务和越来越多样化的用户需求,不断扩展的应用需要越来越合理的模式.越来越智能的工具来保障运维能灵活便捷.安全稳定地开展.企业网络规模的不断扩大,从 ...

  10. 4.2.2 等差数列的前n项和公式

    ${\color{Red}{欢迎到学科网下载资料学习 }}$ [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack/2 ...