String hashcode的兴趣试玩

今天突然看到Hashcode和equals,==比较时,一时兴起,想了解一下hashcode生成规则,为什么hashcode相同,无法说明对象相等,但用equals说明相同,却可以推出对象的hashcode一定相等,带着这个疑问做了如下实验:

实验结论:实验证明"1x","3:","2Y"明显不同,但他们的hashcode却出乎意料的完全相同为1639;(这只是举个例子,应该还有其他一些可能)

现在附String的hashcode源码逻辑:

结论:

“2Y”.hashcode=1639 可以推导出:“2Y2”.hashcode=31*1639+50   其中,50是字符“2”的accii值;

所有可以清楚明白:equals证明的相等,其hashcode一定相同,但hashcode相同,不一定是同一个对象;

而关于equals 和 ==   

equals:其中数值类型的对象类型做比较时使用,逻辑:先比较类类型是否一致,再比较值是否相等(此时是先转换成基础类型在用==比较)

==: 数字类型的基础类型做比较时使用,比如:boolean,int,char等等,进行值比较是否相同

原文地址:https://www.cnblogs.com/outpointexception/p/8555456.html