equals()和hashCode
equals()和hashCode
如果两个对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;
如果两个对象的 hashCode 相同,它们并不一定相同。但容易造成Set等使用哈希存储的系统存取性能急剧下降。
equals()的特点:自反性,对称性,传递性,一致性
自反性(x.equals(x)必须返回 true)、
对称性(x.equals(y)返回 true 时,y.equals(x)也必须返回 true)、
传递性(x.equals(y)和 y.equals(z)都返回 true 时,x.equals(z)也必须返回 true)
一致性(当 x 和 y 引用的对象信息没有被修改时,多次调用 x.equals(y)应该得到同样的返回值)
自定义equals()注意事项
使用==操作符检查"参数是否为这个对象的引用";
使用 instanceof 操作符检查"参数是否为正确的类型";
对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;
满足equals()的特点测试:自反性,对称性,传递性,一致性
重写 equals 时总是要重写 hashCode。
equals()与null
Null.equals()则报异常。A.equals(null)永远为false