早教吧作业答案频道 -->其他-->
java中equals()相等的两个对象,hashcode()一定相等这句该怎么样理解,equals()相等指的是Object.equals()的对象地址相等吗?然后hashcode()就相等了?还是怎么样理解?还有equals什么情况下重写,和重写equa
题目详情
java 中 equals() 相等的两个对象,hashcode() 一定相等
这句该怎么样理解,equals()相等指的是Object.equals()的对象地址相等吗?然后 hashcode()就相等了?还是怎么样理解?还有equals什么情况下重写,和重写equals 一定为什么也要重写 hashcode
这句该怎么样理解,equals()相等指的是Object.equals()的对象地址相等吗?然后 hashcode()就相等了?还是怎么样理解?还有equals什么情况下重写,和重写equals 一定为什么也要重写 hashcode
▼优质解答
答案和解析
在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然.
为何会有这样的要求?
在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?
首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复.
如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
为何会有这样的要求?
在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?
首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复.
如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
看了 java中equals()相...的网友还看了以下:
设向量a(cos23·,cos67·)b(cos68`,cos22`)c=a+tb(t属于R)求a 2020-04-27 …
If I hadn"t stood under the ladder to catch you w 2020-05-14 …
What does the woman buy in the end?A.A yellow T-sh 2020-05-24 …
What does the woman buy in the end? A.A yellow T-s 2020-05-25 …
What dose the woman buy in the end?A. A yellow T-s 2020-05-25 …
计算一条链为3‘A-T-A-G-C-T-G-C-A-G-T-G-A5’的双链片段的碱基组成?写出具 2020-06-07 …
碱基计算的规律.①A等于T,G等于C,A+G=T+CA+G/T+C等1.②一条单链的A+G/T+C的 2020-11-27 …
.某双链DNA分子中,作为模板链的部分碱基的排列顺序是:G—C—A—G—T—A—C—C—G—C—G— 2020-11-29 …
遗传物质控制蛋白质合成的时候,氨基酸对应的密码子是DNA上的同步还是mRNA?DNA链碱基序列G-C 2020-12-21 …
DNA分子的双螺旋结构中遵循碱基互补配对原则的是()A.G与T配对B.A与C配对C.A与T配对D.U 2021-01-22 …