覆盖equals时请遵守通用约定
Object类中非final修饰的方法有equals()、hashCode()、toString()、finalize()、clone()
1、equals()方法不需要被覆盖的情况:
1)实例化的对象只有一个
2)不需要进行逻辑判断,只是单纯的比较内存地址是否相同
3)父类覆盖了equals()方法,并且子类中完全够用
4)类是私有的或者包级私有,equals()方法不会被调用。但是建议重写然后抛AssertionError(断言语句失败)异常
2、equals()方法需要被覆盖的情况:
想要实现逻辑比较。比如实现 相同值的不同对象认为是相等的
3、equals方法通用约定:
1)自反性:自己和自己比较时 返回true
2)对称性:x.equals(y) 和 y.equals(x)必须是相同的
3)传递性:如何x.equals(y) y.equals(z)那么x.equals(z)
4)一致性:如果对象的值没有改变,那么x.equals(y)一直是相同的结果
5)非空性:任何非空对象和null比较都返回false
4、覆盖equals方法的步骤
1)== 判断两个对象的内存地址是否相同。
2)对象instanceof类型 判断传的参数是否属于同一个类型 不是的话 直接返回false
3)将参数转化为实际的类型,因为instanceof已经判断过,所以放心转。
4)判断关键域是否相同。
5、覆盖equals应当注意的问题
1)short、byte、int、long可以用==比较。float和double用Float.equals() Float.compare
2)先比价 容易比较的域
3)覆盖equals总要覆盖hashCode
4)不要过度追求功能
5)重写一定要传参一致 及 boolean equals(Object obj)
最新文章
- jquery懒加载jquery.lazyload.js
- smbclient提示NT_STATUS_INSUFFICIENT_RESOURCES
- Oracle数据库分页的三种方法
- iPhone:4.7 5.5 4 3.5 对应的各个设备屏幕尺寸对应的像素及App上线信息
- POJ 1681 (开关问题+高斯消元法)
- CF 149D Coloring Brackets 区间dp ****
- 使用JavaScript
- MySQL-使用tcpdump排查MySQLl数据库tps飙升的问题
- App Submission Issues
- 再看IOC, 读深入理解DIP、IoC、DI以及IoC容器
- 记一次Hbase查询速度优化经历
- java中数组、list、泛型集合的长度
- [计算机视觉]100行python实现摄像机偏移、抖动告警
- EL表达式、JSTL标签库
- Nginx实践篇(2)- Nginx作为静态资源web服务 - 控制浏览器缓存、防盗链
- Map的嵌套
- Ubuntu下matplotlib的中文显示
- Comet OJ - Contest #2 简要题解
- output.filename 与 output.chunkFilename 的区别
- js模板引擎用法