java里equals和hashcode之间什么关系
2个回答
展开全部
这个从头说起:
在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方法返回值应该是相同数字。
在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方法返回值应该是相同数字。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询