Object中HashCode()是一个本地方法,如图所示
底层是C++,本人也看不懂,感兴趣可以去看看。
版权声明:本文为CSDN博主「xusiwei1236」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xusiwei1236/article/details/45152201
其中String类型源码如下,他通过value字符数组产生一个散列码,如图所示
所以两个相同的字符串他们的hashCode也一定相同,但是可能不同字符串的散列码也会相同,因为String的散列码是通过导出的,所以String类型的比较一般用equals()方法,而==比较的则是内存的地址,Object类里默认的equals()方式就是==,如下
public boolean equals(Object obj) {
return (this == obj);
}
hashMap集合中key的唯一性底层比较方式
hashMap中键,先是通过hashCode比较,如果相同,则再调用equals()方法,如果也是相同则判断为同一个键,如下,自定义一个A类,重写hashCode方法使他一直返回同一个整数
结果:1
验证了上面的说法,所以当hashMap集合中需要一个对象当作键,并且有一个唯一性的判断标准的时候需要重写hashCode()和equals()方法。
本人邮箱1021975780@qq.com,错误请指出,感谢。