为什么重写了equals方法一定要重写hashcode方法 ; ==和equals的区别

Object类是所有类的超类,在Object类中定义了equals方法和hashcode方法。在Object类中,equals方法是判断这两个对象是否具有相同的引用。hashcode方法是默认导出对象的存储地址。如果重写了equals方法,看一个例子。
为什么重写了equals方法一定要重写hashcode方法 ; ==和equals的区别

在这个Student类中重写了equals方法,比较的是这两个对象的内容。那么equals方法返回的是true,但是又因为没有重写hashcode方法,那么默认使用的是Object 类的hashcode方法,返回的是对象的存储地址,所有返回的是false。这就和hashcode的规则矛盾了。所以必须要重写hashcode方法。

提示:String类中已经复写了equals和hashcode方法,在String类中,字符串的散列码是由内容导出的。equals方法比较的是字符串的内容。

==:
基本类型中:==比较的是值。
引用类型中:==比较的是内存地址。

equals:
引用类型:比较的是内存地址,有些类也会复写equals的方法,例如String类中复写了equals方法,定义为比较字符串的内容。String不是基本类型。