您的位置:首页 > Web前端

《Effective Java》读后感(二)

2014-01-18 23:03 302 查看
上一篇读后感没有记录实质性的东西,从这篇开始,会记录一些我觉得很重要或者很经典的东西。

equals的约定

自反性:x.equals(x)必须返回true
对称性:y.equals(x)返回true,x.equals(y)也必须返回true
传递性:x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也必须返回true
一致性:只要对象没有修改,调用equals方法会返回一致的结果
对于任何非null值x,x.equals(null)必须返回false
覆盖equals必须覆盖hashCode,所以:

对象没有被修改,hashCode必须始终返回同一个整数
如果两个对象调用equals相等,那么他们的hashCode必须返回同一个整数

一个推荐的hash算式

hash = 31 * hash + (需要参与hash的field计算的int值)
有多少field计算多少次,hash初始值设为任意非零整数。

Clone

覆盖注意事项:

一定要返回super.clone()
如果有引用,则要clone引用
不要递归clone引用,会引起栈溢出
不要忘记检查并抛出CloneNotSupportedException
线程安全的类记得将clone方法也实现为同步的
尽量不适用Cloneable,而用其他方式来代替它

复合优先于继承

因为继承太过于依赖父类,父类的更改会对子类造成较大的损害。只有当B is A的时候,才能让B继承A。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: