effective java学习笔记--3

重写equals与hashCode最佳实践
本文详细介绍了在Java中重写equals方法时的最佳实践,包括如何正确地进行null值检查、选择有效的比较顺序以及何时应该同时重写hashCode方法。此外,还探讨了equals和hashCode之间的关系,并给出了一些应当避免的做法。
第七条:改写equals尽量遵守的约定
7.1 在进行比较时,不需要进行 null 值比较,可以直接采用instanceof 中为null则直接返回false
7.2 域的比较顺序也会影响性能,最新比较的域应该是最容易发生改变的域。
7.3 改写equals的时候一般要改写hashCode()
7.4 不要让equals方法过于聪明
7.5 不要让equals依赖于不可靠的因素
7.6 不要把其中的Object替换成其他的对象
如:
@Override
public boolean equals(OutOfMenery arg0)
{
return false;
}

一个相对较好的equals方法
@Override
public boolean equals(Object arg0)
{
if (!(arg0 instanceof OutOfMenery)) return false; //这里已经做了null值判断
if (arg0 == this) return true;
OutOfMenery cMenery = (OutOfMenery)arg0;
return cMenery.size == this.size;
}

第八条:重写equals必须重写hashCode
8.1规范
1. 同一个程度中如果对象的值没有变化,那么多次调用hashCode方法必须返回同一个整数
2. 如果两个对象的equals方法相同,那么调用hashCode的方法也必须相同
3. 如果两个对象的equals方法不用,不要求hashCode的方法返回相同的值,不过为了散列跟均匀,建议返回相同的值。

8.2 非常不建立使用下种方式来实现hashCode,因为如此会将一个散列表整成一个链表。导致线性运行的程序成平方运行时间。
@Override
public int hashCode()
{
return 42;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值