== 不能重写
1,基本数据类型
基础数据类型比较的是他们值。
2,引用类型(类、接口、数组)
“==”对比的是两个对象的内存地址是否相同 。
string例外
string在jvm虚拟机中的方法区存放,方法区中声明的八种基本数据类型和字符串常量。上边的str1和str2就是字符串常量,new String()的,是字符串实例化对象,是要放在堆里边的,切莫混淆。
equals 可以重写
equals方法用于比较对象的内容是否相等
默认比较的也是两个对象在java虚拟机中的地址,但是我们可以对一个对象的equals方法进行重写
hashCode
1,hashcode方法只有在集合中用到
2,hashCode的设计初衷是提高哈希容器的性能
3,equals的效率是没有hashCode高的
4,hashcode 返回一个对象在java虚拟机中的地址。hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。
总结:
如果两个对象的hashCode()相等,那么他们的equals()不一定相等。
如果两个对象的equals()相等,那么他们的hashCode()必定相等。