没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
站稳马步
——整理 Object 类(为什么重写 equals 和 hashCode 方法)
一. 关键字:
Object、equals()、hashCode()
二. 为什么需要重写:
众所周知,Object 是所有类的父类。但,我们在实际开发中自定义自己类时,往
往需要重写 Object 中 equals 和 hashCode 方法。为什么呢?首先看看 Object 的 API 吧。
Object 类中原始写法是:
public boolean equals(Object obj) {
return (this == obj);
}
可见,原始 equals 比较的是 2 个对象的“内存地址”。但,我们往往是需要判断的是
“逻辑上的内容”是否相等,如:String、Integer、Math...等等,时而我们关心是逻
辑内容上是否相等,而不关心是否指向同一对象,所以所要重写。
再者,尽管 Object 是一个具体的类,但是设计它主要是为了扩展。它所要的非
final 方法( equals hashCode toString clone 和 finalize ) 都 有 通 用 约定
(general contract),因为它们被设计成要被覆盖(override)的。任何一个类,
它在覆盖这些方法的时候,都有责任遵守这些通用的约定;如果不能做到这一点,其它依
赖这些约定的类(例如 HashMap 和 HashSet)就无法结合该类一起正常运行。
JDK API上重写equals约定如下:
自反性:
对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:
对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,
x.equals(y) 才应返回 true。
传递性:
对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,
并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:
对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回
true 或始终返回 false,前提是对象上 equals 比较中所用的信息没
有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false
同时,API规定“当此方法被重写时,通常有必要重写 hashCode 方法,以维
护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码“所以也
资源评论
- runner_forever2012-10-02很喜欢这个,对我有很多帮助
易德军
- 粉丝: 133
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功