早教吧作业答案频道 -->其他-->
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()相...的网友还看了以下:
设函数f(x)在x=a的某个邻域内有定义,则f(x)在x=a处可导的一个充分条件是?请写出分析过程! 2020-03-30 …
设a=(√5-1)/2,求(a^5+a^4-2a^3-a^2-a+2)/a^3-a∵2a=√5-1 2020-04-05 …
关于化学反应的△H的理解正确的是()A.△H>0的反应是吸热反应B.△H=ΣH(反应物)-ΣH(生 2020-04-11 …
有甲、乙两球,甲球由塔顶自由下落,当它下落高度a时,乙球在塔顶下与塔顶距离为b处开始自由下落,结果 2020-07-29 …
一、已知数集M满足条件:若a∈M,则(1+a)/(1-a)∈M(a≠0,a≠±1)(1)若3∈M, 2020-07-30 …
f(x)在x=a的某个领域内有定义,则他在x=a处可导的一个充分条件是当h趋于0,lin[f(a+ 2020-07-31 …
0属于空集吗?A属于空集吗?1属于空集吗?集合{0}与空集相等吗?Q交R的集合是什么?Z交Q的集合 2020-08-02 …
YouknowheisamemberoftheY.H.A.你知道的,他是一名Y.H.A成员.句的of 2020-11-10 …
函数f[x]=logaXa大于0,且a不等于1,在2,3上最大值为1,则a=当a大于1时,f(x)图 2021-01-15 …
导数的几何意义练习题1.曲线y=-2x2+1在点(0,1)处的切线的斜率是多少?2.曲线y=1/2x 2021-01-22 …