提升自己,想进入大型互联网公司。欢迎关注我的微信公众号  ,搜索微信公众号:"一起写程序" ,会分享系列文章,希望大家能一起学习。

在使用equals的时候:

如果是基本类型的比较,不需要重写equals和hashcode因为都重写了,而在引用类型比较的时候,需要重写equals和hashcode。

问题1)== 号和equals区别?

问题1)什么时候需要重写equals和hashcode?

Set的元素是引用类型的时候,

因为基本数据类型,int,String都已经重写了equals方法和hashcode方法。

问题2)为什么要重写equals?

因为从object中继承的equals,其实就是 ==

public boolean equals(Object obj) {

return (this == obj);

}

问题3)为什么重写equals就要重写hashcode?

HashMap对象是根据其Key的hashCode来获取对应的Value。

在重写父类的equals方法时,也重写hashcode方法,使相等的两个对象获取的HashCode也相等,这样当此对象做Map类中的Key时,两个equals为true的对象其获取的value都是同一个,比较符合实际。

问题4)equals和hashcode重写的内容,比较的是什么?

例如:set集合中不想保存重复的student对象。

Set集合是如何比较两个student是否相等呢?转变成两个student怎么才算是相等?

我们根据两个学生的id,来判断。(这就是为什么不同的对象,就得重写equals方法的原因。因为每个对象判断相等的条件不同。)所以要重写的equals方法,比较的是student对象的id是否相等。如果相等我们就判定,两个student对象相等。

Hashcode为什么也要重写呢?

首先hashcode的本质是什么呢?

根据key的hashCode()返回值决定该Entry的存储位置,如果两个key的hash值相同,那么它们的存储位置相同。也就是student的id的hashCode决定,student的存储位置。

如果不重写student的hashCode,默认情况下,Object中的hashCode() 返回对象的32位jvm内存地址。比较的不是student的id.

如果equals都相等了,hashcode不相等,不符合实际的需求。

例如:

HashMap对象是根据其Key的hashCode来获取对应的Value。

在重写父类的equals方法时,也重写hashcode方法,使相等的两个对象获取的HashCode也相等,这样当此对象做Map类中的Key时,两个equals为true的对象其获取的value都是同一个,比较符合实际。

什么时候重写equals方法相关推荐

  1. JAVA中重写equals()方法的同时要重写hashcode()方法

    object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...

  2. 重写 equals 方法就一定要重写 hashCode 方法?其实有个前提

    作者 l 会点代码的大叔(CodeDaShu) 如果问到 == 和 equals 的区别,相信很多程序员同学都能脱口而出:一个是判断地址,一个是判断内容. 但是如果继续追问:"你重写过 eq ...

  3. 重写equals方法的hashcode_Java equals 和 hashCode 的这几个问题可以说明白吗?

    前言 上一篇文章 如何妙用Spring 数据绑定机制,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦于 ...

  4. hashcode相等的两个对象一定相等吗_为什么重写 equals方法时一定要重写hashCode方法?...

    推荐阅读: 一线架构师总结SpringBoot,Cloud,Nginx与Docker,不信你搞不懂 47天洒热血复习,我终于"挤进"了字节跳动(附面经+学习笔记) 五年时间,从蘑菇 ...

  5. 重写equals方法时必须重写hashcode方法吗

    重写equals方法时必须重写hashcode 有规范: 1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode() 2,当obj ...

  6. Java中重写equals()方法时注意点

    Java中重写equals()方法时注意点 一直说,重写一个对象的equals()方法时我们必须重写HashCode()方法,但是如果我们不重写呢?会有什么影响呢? 首先看一下,什么情况下我们需要重写 ...

  7. ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作

    package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) { ...

  8. [转载] 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法

    参考链接: Java重写equals方法 package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 * ...

  9. Java重写equals方法时为什么要重写hashCode方法

    在我们平时编写Java代码时,重写equals方法时一定要重写hashCode方法,这是为什么呢? 在讨论这个问题前,我们先看下Object类中hashCode方法和equals方法. hashCod ...

  10. 重写equals方法---java

    重写equals方法---java /*** 重写equals方法*/ public class Animal {String color;private int age;public boolean ...

最新文章

  1. struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
  2. php use include区别,php use和include区别总结
  3. 树型列表结构宽度调整_如何用Axure画出Web产品的列表组件:基础画法
  4. 让同步函数同步执行,异步函数异步执行,并且让它们具有统一的 API
  5. 正确使用计算机说课稿,《初识计算机》说课稿
  6. seo原创的本质在于质量度
  7. 自学 Python 到什么程度能找到工作,1300+ 条招聘信息告诉你答案
  8. java基础大概_Java基础知识(一)
  9. 2021-2025年中国云计算数据中心IT资产处置(ITAD)行业市场供需与战略研究报告
  10. socketserver模块使用方法
  11. Spring_day04--课程安排_回顾SSH框架知识点_SSH框架整合思想
  12. 网络 猫,路由器,交换机连接设置
  13. 力软敏捷开发框架7.0.6源码介绍
  14. gitLab 修改文件夹名称
  15. 燃烧的远征java(三)-Struts+Spring+Hibernate:java的几种对象(PO,VO,DAO,BO,POJO)解释
  16. 如何使用SIGFOX技术连接物联网?
  17. 游戏后台生成唯一ID
  18. app下载页面html源码,带弹幕 ,3分钟安装
  19. 用php照片艺术化,Photoshop把人像照片转化为艺术格子效果图
  20. FastReport的使用方法

热门文章

  1. 用Canvas画一个七巧板
  2. windox连接电子秤通过COM口获取数据(java)
  3. ScrollView和GestureDetector触屏事件冲突
  4. latex中插入图片以及固定图片位置
  5. Android “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
  6. python读取word文档中的图片_【Python 3 获取Word所有图片】
  7. mac os linux pageup pagedown,教你巧用Mac上的Page UpDown键
  8. 安装测试包(.ipa)到iPhone手机
  9. QImage、QImageReader Qt获取图片大小
  10. Linux之mount以rw,remount重新挂载ext4文件系统(二十八)