java中 HashCode到底是什么?

hashCode是万物的十六进制地址.(这里引用编程思想一句话 "万物都是对象").

hashCode既然是万物的地址.那么我在新建的一个类里 重写Object的hashCode方法
equals方法,依然返回false.
class A{
public int hashCode(){
return 1;
}
public boolean equals(Object obj){
return true;
}
}
public class Test{
public static void main(String[]args){
A a1=new A();
A a2=new A();
output(a1==a2);--->false
output(a1.equals(a2));-->true
}
}

求大师解惑

8个回答

==比较的是对象的内存地址
System.identityHashCode(Object obj)会返回obj的精确hash值,根据obj的内存地址计算得到。

首先 == 比较的是内存地址,我在上面已经写的非常清楚,既然hashCode是内存地址!
我都重写了hashCode返回值了.为什么还是报错

cuiwenb
NE丶Passion 回复我的名字叫徐帆: 那他调用的是什么?
大约 3 年之前 回复
qq_35728177
Tsui丶 因为 == 并不调用hashcode方法
大约 3 年之前 回复

你的equals方法不是返回的 true吗? ==比较的是内存地址, a1 a2是new出来的两个对象他们的内存地址当然是不同的,所以返回false

==比较的是等式两边的地址,

1、hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
2、如果两个对象相同,就是适用于equals(Java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
4、两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

不知道楼主有没有了解过数据结构中的哈希表,Object类中hashCode方法的实现就是哈希函数,而你的覆写return 1也是哈希函数。
hashCode的返回值所映射到的地址如果已经有了值(即hashCode方法返回值相同,Object类中hashCode方法的返回值也有可能有相同的),就会通过‘开发地址法’或‘链地址法’
去找下一个没有存放值的地址空间。java中==比较的是地址是否相同,而不同对象的地址肯定是不同的(尽管hashCode相同)。

hashcode是java对对象的一个标识,,便于实现,,Hashtable,HashMap等,,

不是唯一标识,,知识一种标识(可以存在hash冲突)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问