博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java重写equals_java 如何重写equals
阅读量:5149 次
发布时间:2019-06-13

本文共 631 字,大约阅读时间需要 2 分钟。

java中重写equals表面上看只涉及equals与hashCode两个方法,但如果仔细考虑发现重写一个逻辑完整的equals并不容易,需要考虑克隆,继承(多态)等问题,下面是最近的几点心得

1.先使用==进行判断,==判断的是hashCode是否相等,可以姑且理解为对象的"内存地址",所以重写equals必须重写hashCode方法

2.使用getClass判断类型,如果允许子类与父类对象相等,使用instanceof进行判断

3.最后判断域,域的判断对于基本类型使用==,包装类,字符串等非基本类型使用equals判断

但最好的方式是Objects.equals

4.重写hashCode,调用Objects.hashCode即可

看下Objects.equals的源码

2b086cc0386c971243aa03e3d2fa1b96.png

先使用==进行判断,然后判空,调用equals,这让我想起了两个包装类型比较的问题,拿Integer来说,通常我会先判空,然后调用intValue用==进行判断,或者先判空,然后调用equals.虽然有-128~127的缓存机制,但直接使用==判断包装类型往往是有问题的,而使用前面的两种都要先判空,不然NPE,而直接调用Objects.equals就没有这个问题了

此外从上面看到Objects.equals调用了对象的equals,假设定义了类A,B,对象为a,b,如果A重写了equals,千万不能在equals中直接调用Object.equals(a,b)否则就是死循环了

转载地址:http://nodnv.baihongyu.com/

你可能感兴趣的文章
springBoot yml 和 properties
查看>>
Source not included in list despite source list requirement
查看>>
FL2440驱动添加(5)ADC驱动学习笔记
查看>>
Qt 2D绘图之一:基本图形绘制和渐变填充
查看>>
CS (Compressive sensing, 压缩传感)
查看>>
【R】均值假设检验
查看>>
玩转TypeScript(5)--环境声明
查看>>
色彩的奥秘
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_6_泛型通配符
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_2_进程概念...
查看>>
jbpm node signal
查看>>
spring mvc controller 接收参数
查看>>
UI开发学习中遇到的问题汇总
查看>>
windows2008 配置安装FTP服务器
查看>>
<USACO09JAN>气象测量/气象牛The Baric Bovineの思路
查看>>
[iBoard 电子学堂][第〇卷 电子基础 ]第三篇 单片微控制器、微处理器
查看>>
iOS游戏截图或广告图尺寸要求
查看>>
Python之爬虫-猫眼电影
查看>>
Linux监控工具讲解
查看>>
异步处理的框架Sanic的使用方法和小技巧
查看>>