覆盖equals时请遵守通用约定

如果满足了以下任一条件,这就正是所期望的结果: 类的每个实例本质上都是唯一的。 不关心类是否提供了“逻辑相等”的测试功能。 超类已经覆盖了equals,,从超类继承过来的行为对于子类也是适合的。 类是私有的或是包级私有的,可以确定它的equals方法永远不会被调用。

如果类具有自己特有的“罗吉相等”概念(不同于对象等同的概念),而且超类还,没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。

equals方法实现了等价关系: 自反性 对称性 传递性 一致性 非空性:对于任何非null的引用值x,x.equals(null)必须返回false

实现高质量equals方法的诀窍: 1、使用==操作符检查“参数是否为这个对象的引用”。 2、使用instanceof操作符检查“参数是否为正确的类型”。 3、把参数转换成正确的类型。 4、对于该类中的,每个“关键”域,检查参数中的域是否与该对象中对于的域相匹配。 5、当你编写完成了equals方法之后,应该问自己三个问题:它是否是对称的、传递的、一致的?

告诫: 覆盖equals时总要覆盖hashCode。 不要企图让equals方法过于智能。 不要将equals声明中的object对象替换为其他的类型。

人的一辈子唯一做的就是,不断地用你手中

覆盖equals时请遵守通用约定

相关文章:

你感兴趣的文章:

标签云: