java里equals和hashcode之间什么关系

 我来答
armslave88
推荐于2016-03-23 · TA获得超过416个赞
知道小有建树答主
回答量:535
采纳率:100%
帮助的人:459万
展开全部
这个从头说起:
在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。

基本数据类型在"栈"中存的是其内容值,
对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。
java.lang包中的Object类有public boolean
equals(Object obj)方法,它比较两个对象是否相等。

其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。
Hash散列算法,先获取key的hashCode值,通过hash算法确定将要存储的空间(bucket)。同理,获取key的hashCode值,通过hash算法确定要检索的空间。调用 equals方法依次和bucket中的Key比较。
key的hashCode()方法的返回值对HashMap存储元素时起着很重要的作用。hashCode()是在Object中定义的,而Object的equals方法等同于==,因此应妥善重写该方法。
重写hashCode方法应注意:与equals方法的一致性,即两个对象equals方法比较结果为true,则hashCode方法返回值应相同。hashCode返回的数值应符合hash算法的要求。
对于一个类如果重写了其equals方法,则必须重新hashCode方法,否则在应用hashmap时会出现各种错误。
在对象没有改变的情况下,多次调用hashCode方法返回值应该是相同数字。
man1473
2015-01-31 · TA获得超过223个赞
知道答主
回答量:155
采纳率:0%
帮助的人:110万
展开全部
两个不同的方法,没有一定的联系,在有些容器里面会同时用到这两个方法。
比如hashMap的put方法,hash值相同同时equals方法判断相同时,会认为是同一值,后值会替换前值,而hash相同equals方法判断不同的值则会以链表的结构存储。(在某些情况下,不同的值通过hash算法,会算出同样的hash值)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式