美文网首页
hashcode()和equalt()比较

hashcode()和equalt()比较

作者: 小小弓长张 | 来源:发表于2019-08-11 20:28 被阅读0次

hashCode()方法和equals()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致。

 .equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。

 .hashCode()相等的两个对象他们的equals()不一定相等,也就是hashCode()不是绝对可靠的。

hashCode()和equals()一样都是基本类Object里的方法。Object里hashCode()里面只是返回当前对象的地址。

相同的一个类,new两个对象,由于他们在内存里的地址不同,则他们的hashCode()不同,

只要重写 equals,就必须重写 hashCode;

因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法;

如果自定义对象做为 Map 的键,那么必须重写 hashCode 和 equals;

String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作为 key 来使用;

2、什么时候需要重写?

一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode。

3、那么为什么要重载hashCode呢?

如果你重写了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。

这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。

相关文章

网友评论

      本文标题:hashcode()和equalt()比较

      本文链接:https://www.haomeiwen.com/subject/icqgvqtx.html