==
- 比较的是变量的值。
equals
- 比较的是内存地址。
- 如果是字符串,则比较的是值。例如String a=“aadd234”; 比较的是aadd234。
object超类
- object类是所有类的父类,也是字符串的父类,字符串能调用equals()是因为字符串重写了object类的equals方法。
- object类中的equals方法比较的是地址。
重写equals()方法,一定要重写hashCode()方法
问:重写了equeals()方法后还需要注意什么?
答:如果一个类重写了equals()方法,那么一定会重写hashCode()方法。
追问:为什么?
答:因为hashmap
为了使诸如HashMap这样的哈希表正常使用。具体规定如下:
-
equals相等,hashcode一定相等。
-
equals不等,hashcode不一定不等。
-
hashcode不等,equals一定不等。
-
hashcode相等,equals不一定相等。
因此,如果我们重写了equals,那么必须重写hashCode,使其满足这些规定。当然,如果我们不把自定义对象当成HashMap的键来使用,那么自定义对象不重写equals和hashCode也是可以的。