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()一定返回相同的散列码。但是我们业务逻辑上不等价的对象不要求散列码不相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。