Java中的Object类-hashcode()和equals()方法

关于equals()方法:

Object类中对equals()方法的默认的实现方式是  :  

return this == obj  

那就是说,只有this和obj引用同一个对象,才会返回true。

而我们往往需要用equals来判断 2个对象是否等价(等价的逻辑由我们自己来订),而非验证他们的唯一性。这样我们在实现自己的类时,就要重写equals()。

按照约定,equals要满足以下规则:

自反性:  x.equals(x) 一定是true;

对null:  x.equals(null) 一定是false;

对称性:  x.equals(y)  和  y.equals(x)结果一致;

传递性:  如果a.equals(b) ==true, b.equals(c) ==true,那么a.equals(c)==true;

一致性:  在某个运行时期间,2个对象的状态的改变不会不影响equals()的决策结果,那么,在这个运行时期间,无论调用多少次equals(),都返回相同的结果。


关于hashCode()方法:

关于hashCode方法,一致的约定是重写了equals()方法的对象必须重写hashCode()方法。

如果两个对象通过equals()调用后返回是true,那么这两个对象的hashCode()方法必须返回同样的int散列码。

但是如果两个对象通过equals()返回false,他们的hashCode()返回值允许相同。

总结:equals()为true时,hashCode()一定返回相同的散列码。但是我们业务逻辑上不等价的对象不要求散列码不相同。

你可能感兴趣的:(Java中的Object类-hashcode()和equals()方法)