最近遇到问题

"abc");
System.out.println("abc".hashCode());
System.out.println(s.hashCode());

此时遇到两个hashCode都为96354,看到博客的也可以试下,看下是不是hashCode是不是96354.
在传统定义上Equals()和==比较的都是内存地址。但我们此时看到的hashCode都是一样的,是不是说两个内存地址相同呢?

解决问题

答案是:此时的hashCode被String类重写,以及equals()也被重写,所以此时的Equals比较时调用的不是Object中的equals的方法,此时比较的不是内存地址。
“abc”.hashCode()不是str的jvm地址,String类的hashCode函数被重写了。

写在最后

在java中==号比较的是内存地址,而equals比较的是内存地址和相关限制,在阿里规范中,重写Equals时必须重写hashCode方法。字符串类,String类重写了hashCode和Equals。所以当大家的字符串为”abc”时,hashCode值都为96354.

所以比较内存地址还是==,Equals比较对象时要看是否被重写