1.分析 hashcode 源码
hashcode()返回对象的哈希码值。比如java.util.HashMap提供的散列表
hashcode规则使用如下:
在Java应用程序执行期间多次对同一个对象调用hashCode方法时,只要没有修改在对象上的 equals 比较中使用的信息,该方法就必须一致地返回相同的整数。此整数不需要在应用程序的一次执行与同一应用程序的另一次执行之间保持一致。
如果两个对象根据 equals(Object) 方法是相等的,那么对这两个对象调用hashCode方法必须产生相同的整数结果。
如果根据{@link java.lang.Object# = (java.lang.Object)}方法两个对象不相等,则需要两个对象调用各自的{@code hashCode}方法必须产生不同的整数结果。然而,程序员应该知道产生不同的整数结果,可以提高散列表的性能。
由以上可知:
- 相同的对象必须具有相等的 hashcode
- equals相等的对象,hashcode也一定是相等的
- == 相等的对象,hashcode也一定是相等的