对于所有对象都通用的方法
来源:互联网 发布:域名投资的秘密电子书 编辑:程序博客网 时间:2024/06/05 16:04
第八条:覆盖equals时请遵守通用约定
Object的equals()的规范【JAVASE6】:
- 自反性。对于任何非null的引用值x,x.equals(x)必须返回true。
- 对称性,对于任何非null的引用值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),结果必须一致
- 对于任何非null的引用值x,x.equals(null)必须返回false.
实现高质量equals方法的诀窍:
- 使用==操作符检查“参数是否为这个对象的引用”
- 使用instanceof操作符检查“参数是否为正确的类型”
- 把参数转换成正确的类型
- 对于该类中的每个”关键”域,检查参数中的域是否与该对象中对应的域相匹配
- 当你编写完成了equals方法之后,应该问自己三个问题:它是否是对称的、传递的、一致的
- 覆盖equals时总要覆盖hashCode()
- 不要企图让equals方法过于智能
- 不要将equals声明中的Object对象替换为其他的类型
第九条:覆盖equals时总要覆盖hashCode
- 因没有覆盖hashCode而违反的关键约定是第二条:相等的对象必须具有相等的散列码(hash code)。
- 不要试图从散列码计算中排除掉一个对象的关键部分提高性能。虽然这样得到的散列函数运行起来可能更快,但是他的效果不见得会好,可能导致散列表慢到根本无法使用。
public class PhoneNumber{ private int a; private int b; private vlatile int hashCode;//缓存hashcode public int hashCode(){ int result=hashCode; if(result==0){ reuslt=17; result=31*result+a; result=31*result+b; hashCode=result; } return result; } }
第十条:始终要覆盖toString
- 在实际应用中,toString方法应该返回对象中包含的所有值得关注的信息。
- 无论你是否决定指定格式,都应该在文档中明确地表明你的意图。
第十一条:谨慎地覆盖clone
- 如果你覆盖了非final类中的clone方法,则应该返回一个通过调用super.clone而得到的对象。
- 实际上,对于实现了Cloneable的类,我们总是期望它也提供一个功能适当的公有的clone()方法。
- clone方法就是另一个构造器;你必须确保它不会伤害到原始的对象,并确保正确地创建被克隆对象中的约束条件。
- 最好提供某些其他的途径来代替对象拷贝,或者干脆不提供这样的功能5.
- 另一个实现对象拷贝的好方法是提供一个拷贝构造器
第十二条:考虑实现Comparable接口
0 0
- 对于所有对象都通用的方法
- 对于所有对象都通用的方法
- 对于所有方法都通用的对象
- 对于所有对象都通用的方法
- 对于所有对象都通用的方法
- 对于所有对象都通用的方法
- 对于所有对象都通用的方法
- Effective Java:对于所有的对象都通用的方法
- effective java(对于所有对象都通用的方法)
- Effective Java:对于所有对象都通用的方法
- 对于所有对象都通用的方法(二)
- 第3章 对于所有对象都通用的方法
- Effective Java Note(对于所有对象都通用的方法)
- Effective Java:对于所有对象都通用的方法
- Effective java笔记-对于所有对象都通用的方法
- EffectiveJava第三章:对于所有对象都通用的方法
- 2、对于所有对象都通用的方法
- EffectiveJava笔记(二) 对于所有对象都通用的方法
- Android动画之PropertyAnimation;Interpolator;Evaluator与Keyframe
- Java集合概述
- Android三种网络通信方式
- 【DP+数学小技巧】三个袋子
- 88. Merge Sorted Array
- 对于所有对象都通用的方法
- 从零开始写C# MVC框架之--- 配置log4日志
- python常用处理
- PB中嵌入式SQL语句技巧1
- Collator类详解(Collections.sort 中文排序)
- HDU 3829Cat VS Dog
- 软件工程之概述
- Gulp入门教程
- 线程间通信、等待/唤醒机制的使用