重写equals方法的安全写法
1. 什么是equals方法?
我们首先得知道,Object类是 Java中所有类的父类(超类/基类),也就是说,在Java中,所有的类都是默认继承自Object类的,换言之,Object类中所实现的方法我们都可以直接拿来用。而equals方法便是Object类所实现的众多方法之一。
以下截图自Java11 API
Object类的所有方法:
1.1 equals方法:
equals:是Object类中的方法,只能判断引用类型,等下可以带大伙看看jdk源码
2. 为什么要重写equals方法?
我们有Object类实现的equals方法能用不就行了?为啥还得重写equals方法呢?这就要看看Object类的equals方法实现机制了。
2.1 举个例子吧~
比较两个int时可以直接用 == ,当它们相等时结果为true,而当new了两个属性完全一样的对象时,再用 == 来进行比较就会出现错误,如我们所见,明明我们应该想要得到true的,结果却是false
源码:
运行结果:
到这里,我们应该大致清楚为啥要在比较对象时重写equals方法了,因为Object类提供给我们的不好使~~
//String类equals源代码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

浙公网安备 33010602011771号