什么时候重写equals方法
提升自己,想进入大型互联网公司。欢迎关注我的微信公众号 ,搜索微信公众号:"一起写程序" ,会分享系列文章,希望大家能一起学习。
在使用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方法相关推荐
- JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法 ...
- 重写 equals 方法就一定要重写 hashCode 方法?其实有个前提
作者 l 会点代码的大叔(CodeDaShu) 如果问到 == 和 equals 的区别,相信很多程序员同学都能脱口而出:一个是判断地址,一个是判断内容. 但是如果继续追问:"你重写过 eq ...
- 重写equals方法的hashcode_Java equals 和 hashCode 的这几个问题可以说明白吗?
前言 上一篇文章 如何妙用Spring 数据绑定机制,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦于 ...
- hashcode相等的两个对象一定相等吗_为什么重写 equals方法时一定要重写hashCode方法?...
推荐阅读: 一线架构师总结SpringBoot,Cloud,Nginx与Docker,不信你搞不懂 47天洒热血复习,我终于"挤进"了字节跳动(附面经+学习笔记) 五年时间,从蘑菇 ...
- 重写equals方法时必须重写hashcode方法吗
重写equals方法时必须重写hashcode 有规范: 1,当obj1.equals(obj2) 为 true 时,obj1.hashCode() == obj2.hashCode() 2,当obj ...
- Java中重写equals()方法时注意点
Java中重写equals()方法时注意点 一直说,重写一个对象的equals()方法时我们必须重写HashCode()方法,但是如果我们不重写呢?会有什么影响呢? 首先看一下,什么情况下我们需要重写 ...
- ArrayList的remove方法(重写equals方法) 与LinkedList的常用操作
package C12_18;import java.util.ArrayList;public class joy {public static void main(String[] args) { ...
- [转载] 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法
参考链接: Java重写equals方法 package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 * ...
- Java重写equals方法时为什么要重写hashCode方法
在我们平时编写Java代码时,重写equals方法时一定要重写hashCode方法,这是为什么呢? 在讨论这个问题前,我们先看下Object类中hashCode方法和equals方法. hashCod ...
- 重写equals方法---java
重写equals方法---java /*** 重写equals方法*/ public class Animal {String color;private int age;public boolean ...
最新文章
- struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
- php use include区别,php use和include区别总结
- 树型列表结构宽度调整_如何用Axure画出Web产品的列表组件:基础画法
- 让同步函数同步执行,异步函数异步执行,并且让它们具有统一的 API
- 正确使用计算机说课稿,《初识计算机》说课稿
- seo原创的本质在于质量度
- 自学 Python 到什么程度能找到工作,1300+ 条招聘信息告诉你答案
- java基础大概_Java基础知识(一)
- 2021-2025年中国云计算数据中心IT资产处置(ITAD)行业市场供需与战略研究报告
- socketserver模块使用方法
- Spring_day04--课程安排_回顾SSH框架知识点_SSH框架整合思想
- 网络 猫,路由器,交换机连接设置
- 力软敏捷开发框架7.0.6源码介绍
- gitLab 修改文件夹名称
- 燃烧的远征java(三)-Struts+Spring+Hibernate:java的几种对象(PO,VO,DAO,BO,POJO)解释
- 如何使用SIGFOX技术连接物联网?
- 游戏后台生成唯一ID
- app下载页面html源码,带弹幕 ,3分钟安装
- 用php照片艺术化,Photoshop把人像照片转化为艺术格子效果图
- FastReport的使用方法
热门文章
- 用Canvas画一个七巧板
- windox连接电子秤通过COM口获取数据(java)
- ScrollView和GestureDetector触屏事件冲突
- latex中插入图片以及固定图片位置
- Android “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
- python读取word文档中的图片_【Python 3 获取Word所有图片】
- mac os linux pageup pagedown,教你巧用Mac上的Page UpDown键
- 安装测试包(.ipa)到iPhone手机
- QImage、QImageReader Qt获取图片大小
- Linux之mount以rw,remount重新挂载ext4文件系统(二十八)