==比较的是两个对象对象的地址。
equals比较的是两个对象的实际内容,但是对于直接继承自Object的复合对象,equals比较的就是地址,其功能和==相等,如果要实现比较像等内容功能,就要重写equals。
特殊:
String s3 = new String("s3")
String s4 =new String("s4")
== 是不相等的,因为不同地址。String s1 = "hello";
String s2 = "hello";
==是相等的。
因为不是new一个对象,JVM会将重复引用对象。
而对于Integer小于127数的也是一样的,会被重复利用。
Hashcode一般用在跟哈希表相关的容器里,比如HashMap.
hashMap在get时,先用hashcode定位桶,定位好后,再在桶内equals定位元素。所以如果hashCode重写错误,会引发get不到对象。另外,Object的hashcode就是对象地址的哈希码,所以复合对象要注意hashMap的重写。