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. Ubuntu22.04系统安装DeepMind Lab

    相关资料: DeepMind Lab的一些python例子-----(Ubuntu22.04系统安装DeepMind Lab)后续 ================================== ...

  2. unity游戏源码和教程:智能分析话语的三维唯美世界

    我不想和任何人说话,大家不要打扰我. 这个游戏的源码(含教程文档)我放到了夸克网盘https://pan.quark.cn/s/618fb9459029 小区: 小区傍晚的雪: 小区的晚上: 家里: ...

  3. Es java API官网手册

    官方地址: 一.TransportClient客户端 https://www.elastic.co/guide/en/elasticsearch/client/java-api/7.5/index.h ...

  4. 2024DASCTF

    DASCTF prese 一眼控制了平坦化,可以用d810梭一下 跟进一下main_crypto这个函数 主要是两部分,第一部分是生成一个256大小的数组,通过输入的长度和遍历生成的一个数组 第二部分 ...

  5. docker 命令 报错device or resource busy

    背景: docker-compose up -d 运行容器报错:failed to remove root filesystem for xxx: remove /var/lib/docker/dev ...

  6. 欢迎加入d3shop,一个DDD实战项目

    背景 整个<老肖的领域驱动设计之路>系列关于认知的核心部分已经基本闭环,但纸上得来终觉浅,还是需要通过实际操作来体会和验证我们的观点,接下来,我将通过一个实战项目来带着大家一起体验从需求到 ...

  7. web前端常用的五种方式搭建本地静态html页面服务器

    方式一:live-server live-server是一款npm工具,可以在项目目录启动一个node服务,然后直接在浏览器中预览,并且自动全局监听实时更新. 两种安装方式: 全局安装 npm i l ...

  8. LiveChat vs LiveAgent vs Front vs Email

    它们是什么? LiveChat, LiveAgent 算是同类产品. LiveChat 的核心(或者说起点)是 live chat 这个功能, 而 LiveAgent 的核心是 ticket. 如果拿 ...

  9. mongo查看服务状态

    转载请注明出处: 查看数据库列表 show dbs 查看当前数据库 db 查看集合列表 show collections 查看数据库的状态 db.stats() 查看集合的状态 db.collecti ...

  10. Blazor静态服务端呈现(静态SSR)身份认证

    本文介绍 Blazor 静态服务端呈现(静态 SSR)模式下,用户登录身份认证是如何实现的. 1. SSR 简介 SSR 是服务器侧呈现,HTML 是由服务器上的 ASP.NET Core 运行时生成 ...