《Effective Java》读后感(二)

上一篇读后感没有记录实质性的东西,从这篇开始,会记录一些我觉得很重要或者很经典的东西。

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。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值