早教吧作业答案频道 -->其他-->
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()相...的网友还看了以下:
国外钢丝绳标注typea(z)a(s)括号前的a是什么意思?wirerope6xFi(29)-φ2 2020-05-13 …
还是一个关于集合的基础问题就是1不属于集合S,a∈S,为什么1-(1-a分之1)属于S 2020-06-06 …
还未回答满分1.00题干下列S不是集合X={1,2,3,4,5,6,7,8}的一个划分的是()请选 2020-06-15 …
设实数集S是满足下面两个条件的集合:①1不属于S;②若a属于S,则1\1-a属于S.求证:若a属于 2020-06-18 …
设实数集S是满足下面两个条件的集合:①1不属于S;②若a属于S,则1\1-a属于S.求证:若a属于 2020-06-18 …
单词末尾是S的用所有格时加‘S吗?TheBeatles'?TheBeatles's?Ross'?R 2020-07-12 …
设实数集S是满足下面两个条件的集合:①:1不属于S;②:若a∈S,则1/(1-a)∈S求证:若a∈ 2020-07-30 …
s听=(v声t-v车t)的二分之一是求什么的(初二上物理)s听=(v声t-v车t)的二分之一还有s除 2020-11-02 …
怎么样判断山在南半球还是北半球,哪面朝南哪面朝北一般都会涉及到雪线,植被什么的,究竟要怎么判断呢A. 2020-12-05 …
nemesis['nemisis]这个词,sis中的第一个s为什么发/s/,第二个s为什么发/s/. 2021-01-26 …