首先看一段程序
String aStr = "Aa";
String bStr = "BB";
System.out.println(String.format("aStr:%d,bStr:%d", aStr.hashCode(), bStr.hashCode()));
System.out.println(aStr.equals(bStr));
运行结果如下:
C:\android\java\jdk1.8\bin\java.exe
aStr:2112,bStr:2112
false
可以看到,这两个字符串的hashCode()是相同的,但是equals()方法返回为false。这是为什么呢?
这是因为hash表本身是一种散列表,而在散列表中,hashCode()相等即两个键值对的哈希值相等;然而哈希值相等,并不一定能得出键值对相等。
所以根据上述的情况以及设计要求,可以得到结论:
两个对象equals返回true,那么hashcode一定相等;两个对象的hashcode相等,那么equals不一定为true。
重写equals()方法,则hashCode()方法也必须重写,这样才能保证equals()方法返回true时,hashcode的值相等。
版权声明:本文为qq_32101993原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。