Android 编码规范:(八)覆盖equals时请遵守通用约定
2012-06-04 20:24
225 查看
不覆盖equals的情况
1)类的每个实例本质上是唯一的;2)不关心类是否提供了“逻辑想等”的测试功能;
3)超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的;
4)类是私有的或包级私有的,可以确定他的equals方法永远不会被调用。
应该覆盖equals的情况
如果类具有自己特有的“逻辑想等”概念,而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。这通常属于“值类”的情形。equals 方法在非空对象引用上实现相等关系
l 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。l 对称性:对于任何非空引用值 x 和y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
l 传递性:对于任何非空引用值 x、y 和z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
l 一致性:对于任何非空引用值 x 和y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
l 对于任何非空引用值 x,x.equals(null) 都应返回 false。
实现高质量equals方法的诀窍
1) 使用==操作符检查“参数是否为这个对象的引用”;2) 使用instanceof操作符检查“参数是否为正确的类型”;
3) 把参数转换成正确的类型;
4) 对于该类中的每个“关键”域,检查参数中的域是否与该对象中对应的域相匹配(为了获得最佳性能,应该先比较最有可能不一致的域,或者开销最低的域,最理想的情况是两个条件同时满足的域);
5) 当编写完equals方法后,应该问自己三个问题:它是否是对称的、传递的和一致的?
相关文章推荐
- 【Effective Java】4、覆盖equals时请遵守通用约定
- effective java读书笔记8:覆盖equals方法请遵守通用约定
- Effective Java - 对于所有对象都通用的方法 - 覆盖 equals 时请遵守通用约定
- 第八条:覆盖equals时请遵守通用约定
- 第8条:覆盖equals时请遵守通用约定
- Effective Java(避免使用最终方法、覆盖equals时请遵守通用约定)
- 《Effective java》读书记录-第8条-覆盖equals时需要遵守通用约定
- Effective Java 第八条:覆盖equals请遵守通用约定
- 第八条:覆盖equals时请遵守通用约定
- Effective Java(避免使用最终方法、覆盖equals时请遵守通用约定)
- 覆盖equals方法时请遵守通用约定
- Effective Java 对于所用对象都通用的方法 8.覆盖equals时请遵守通用约定.txt
- Item 8 覆盖equals时请遵守通用约定
- Effective Java(避免使用最终方法、覆盖equals时请遵守通用约定)
- Effective Java 第8条:覆盖equals时要遵守通用约定
- Effective Java(避免使用最终方法、覆盖equals时请遵守通用约定)
- 第8条:覆盖equals时请遵守通用约定
- Effective Java(避免使用最终方法、覆盖equals时请遵守通用约定)
- 《Effective Java》读书笔记——覆盖equals时请遵守通用约定
- 第8条:覆盖equals时遵守通用约定