hashCode和equals方法
JDK version:1.8.0_171
Object类位于Java的顶层,是Java所有类的父类。任何对象,包括数组,都实现了该类的方法。首先针对Object类中的两个方法equals()和hashCode()方法进行讲解。
1. Object类hashCode和equals方法
hashCode方法返回对象的哈希值,实现本方法主要是为了支持hash表(比如HashMap)
对于hashCode的规定如下:
- 在Java应用程序的一次执行过程中,如果一个对象在equals()方法进行比较所使用到的信息没有修改,那么该对象的hashCode()不管调用多少次,始终返回相同的hash值。但多次运行Java应用程序时,同一个对象的hashCode()方法的返回结果可以不同。
- 如果x.equals(y)返回true,那么x和y的hashCode()方法应该返回相同的hash值。
- 如果x.equals(y)返回false,那么x和y的hashCode()方法可以返回相同的hash值,但是我们必须意识到对于"不相等"的两个对象返回相同的hash值,这可能会降低hash表的性能。
public native int hashCode();
在合理可行的范围内,Object类实现的hashCode方法对于不同的对象返回不同的整数。
修饰符native表明该方法是原生方法,由操作系统实现,Java只负责调用,不同平台可能会有不同的实现,