博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Effective java》学习笔记 2 之 对于所有对象都通用的方法
阅读量:6033 次
发布时间:2019-06-20

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

hot3.png

1.覆盖equals时请遵守通用约定

要覆盖equals就必须遵循以下约定

1 自反性

对于非空对象x x.equals(x)为true。(基本都满足)

2 对称性

对于非空对象x y. 若x.equals(y) 返回true,则y.equals(x) 一定返回true

3 传递性

对于非空对象x y z 。 若 x.equals(y), y.equals(z) 都返回true,则一定有x.equals(z) 返回true

4 一致性

对于不可变对象来说,如果两个对象相等,则永远相等。可变对象就不一定了。设计类是的时候就要考虑到它是否可变,不可变就必须遵循一致性。

5 非空性

对于非空对象x x.equals(null)都必须返回false

2.在覆盖equals时总要覆盖hashCode方法

对于覆盖hashcode也有约定:

1 在应用程序的执行期间,只要对象的equals方法的比较操作作用到的信息没有发生改变,那么对同一个对象多次调用,hashCode返回码必须是同一个整数。

2 如果两个对象根据equals方法比较相等,那么调用这两个对象任意一个对象的hashCode方法都必须产生同样的整数结果。

3 始终要覆盖toString ,toString覆盖起来没有太多的约定。

4 谨慎覆盖clone ,调用clone方法是不会调用构造器的。 其他的没理解清楚,不写了。

5 考虑实现Comparable接口,实现此接口可以在部分集合中完成排序的功能,compareTo也应该有 equals的传递性。

转载于:https://my.oschina.net/qiuhoude/blog/467714

你可能感兴趣的文章
设计模式之简单工厂模式
查看>>
C++中变量的持续性、链接性和作用域详解
查看>>
2017 4月5日上午
查看>>
Google Chrome开发者工具
查看>>
第一阶段冲刺报告(一)
查看>>
使用crontab调度任务
查看>>
【转载】SQL经验小记
查看>>
zookeeper集群搭建 docker+zk集群搭建
查看>>
Vue2.5笔记:Vue的实例与生命周期
查看>>
论JVM爆炸的几种姿势及自救方法
查看>>
联合体、结构体简析
查看>>
使用throw让服务器端与客户端进行数据交互[Java]
查看>>
java反射与代理
查看>>
深度分析Java的ClassLoader机制(源码级别)
查看>>
微服务架构选Java还是选Go - 多用户负载测试
查看>>
我的友情链接
查看>>
Javascript中的异步如何实现回调
查看>>
halcon算子介绍
查看>>
挖掘你不知道的windowsxp中的带宽潜能
查看>>
Software Engineering 招聘要求
查看>>