java中HashCode()和equals()方法

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,错误请指出,感谢。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容