Java - 两个对象值相同(x.equals(y) == true),但却可以有不同的hash code,这句话对不对?
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;
(2)如果两个对象的hashCode相同,它们并不一定相同。
当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
补充:关于equals和hashCode方法,很多Java程序员都知道,但很多人也就是仅仅知道而已,在Joshua Bloch的大作《Effective Java》(很多软件公司,《Effective Java》、《Java编程思想》以及《重构:改善既有代码质量》是Java程序员必看书籍,如果你还没看过,那就赶紧去亚马逊买一本吧)中是这样介绍equals方法的:
首先equals方法必须满足自反性(x.equals(x)必须返回true)、对称性(x.equals(y)返回true时,y.equals(x)也必须返回true)、传递性(x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true)和一致性(当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值),而且对于任何非null值的引用x,x.equals(null)必须返回false。
实现高质量的equals方法的诀窍包括:
1. 使用==操作符检查”参数是否为这个对象的引用”;
2. 使用instanceof操作符检查”参数是否为正确的类型”;
3. 对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;
4. 编写完equals方法后,问自己它是否满足对称性、传递性、一致性;
5. 重写equals时总是要重写hashCode;
6. 不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解。
Java - 两个对象值相同(x.equals(y) == true),但却可以有不同的hash code,这句话对不对?相关推荐
- 面试题:两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 对.如果是String等类的话,必须有相同的hashcode: 但若是这个类重写了hashc ...
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
答:不对,有相同的 hash code这是java语言的定义:1) 对象相等则hashCode一定相等:2) hashCode相等对象未必相等 hashCode 的常规协定是: (1)在 Java 应 ...
- 【Java面试题】41 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?...
对. 如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等. 如果不是要保存在HashSet或HashMap,则与hashcode没有什么 ...
- hashCode之一--两个对象值相同,有相同的hash code
两个对象值相同(x.equals(y) == true),则一定有相同的hash code. 这是java语言的定义: 因为:Hash,一般翻译做"散列",也有直接音译为&quo ...
- 两个对象值相同hashcode是否相同
不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hashCode)应当相同. Java 对于 eqauls 方法和 hashCode 方法是这样规定的: ( ...
- java比较两个对象重写,不重写equals进行两个对象间的深度比较
背景 我们知道在Java中比较两个对象是否相同,可以有多种方法,最常见的就是 == 和 equals 方法.但是由于==对比的是对象引用本身,因此重写equals才是最常用和可靠的比较两个对象是否相同 ...
- 【Java】字符串对象的比较(==、equals、equalsIgnoreCase、compareTo、compareToIgnoreCase、校对顺序比较)
字符串对象的比较 文章目录 字符串对象的比较 1.==:比较是对象的地址 2.equals:比较是字符串对象的内容 3.equalsIgnoreCase:比较的是字符串对象的内容,不区分大小写 4.c ...
- angular判断两个对象值是否相等,包含对象深层判断,深拷贝的两个对象
angular public isEqual(obj1:any,obj2:any):boolean{if(!(obj1 instanceof Object) || !(obj2 instanceof ...
- java两个对象属性比较
两个对象进行比较相等,有两种做法: 1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可.这里就不用说明 2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用 ...
- java两个对象赋值_一起学Java(二十六)----- 对象之间赋值
不积跬步,无以至千里:不积小流,无以成江海. Java语言基础 Java对象之间赋值 赋值是用等号运算符" = "进行的,在对对象进行"赋值"时,实际就是将句柄 ...
最新文章
- 重构ncnn,腾讯优图开源新一代移动端推理框架TNN
- 细说Android事件传递
- SSH框架--Struts的故事
- python基础笔记_python基础学习笔记(九)
- /sys/class/gpio 文件接口操作IO端口(s3c2440)
- Sublime Text 3 中文乱码的解决方法
- 网易云信启动“T服务”,为开发加速
- python顺时针旋转_Python之二维数组N*N顺时针旋转90度
- C# 使用int.TryParse,Convert.ToInt32,(int)将浮点类型转换整数时的区别
- Error - Found cycle in the ListNode
- c语言课程结束,【计算机】程序设计——C语言基础秋季学期课程圆满结束
- java面试题——java基础(四),java初级面试笔试题
- 深度优先遍历和广度优先遍历_图与深度优先搜索和广度优先搜索
- 【PyTorch】推荐收藏!史上最全的 PyTorch trick 集锦
- 使用pyspark将hive数据库中的数据保存为CSV文件
- POI--各种样式的XSSFCellStyle的生成
- 明尼苏达计算机科学与工程,2019上海软科世界一流学科排名计算机科学与工程专业排名明尼苏达大学双城分校排名第101-150...
- 配置PLSQL连接ORACLE数据库
- 钛资本研究院:保险科技行业现状及趋势分析
- java gdal tiff_GDAL读写Tiff、DEM文件
热门文章
- 《请停止无效的社交》第一章七问七答读后感作文2300字
- mysqldump set-gtid-purged=OFF的问题
- 系统语言在C盘什么地方,Win7桌面文件在C盘哪里?|Win7系统桌面文件在哪?
- springboot毕设项目心怡音乐网站3764d(java+VUE+Mybatis+Maven+Mysql)
- 惠安高考状元2021成绩查询6,高考总分相同排名标准不同 惠安一县两“状元”
- 编程语言选型之技法融合,与领域融合的那些套路
- 修改html倒计时,利用自定义HTML小工具实现倒计时
- array函数python_python中如何使用numpy.array函数创建数组?
- NexT主题添加音乐
- 解读 | 数据分析师(含转行)的面试简历如何写?