为什么引用类型要重写hashCode()方法?
因为不重写的情况下,两个我们认为相等的对象经过哈希后得到了不同的哈希值。
为什么会发生这样的情况?
当我们不重写hashCode()方法时,默认调用Object.hashCode():C++实现的native方法,对地址进行哈希。
故当我们使用引用类型变量的hashCode()方法时,必须要重写该方法,让其用对象的值进行哈希,这样才能相同的key得到相同的value。
那么有一个问题:为什么String可以直接调用hashCode()方法,不用重写?
String内部已经帮我们重写了hashCode()方法,包括equals()方法,都可以让我们直接调用。
那我们怎么重写hashCode()方法呢?
1.直接Alt+Insert重写equals方法和hashCode();
2.重写hashCode()方法,return Objects.hash();//小括号中传入任意个类的属性