1.观察Object中equals方法的源码
public boolean equals(Object obj) {
return (this == obj);
}
从源码可以看得出来,默认父类Object类的equals方法底层还是跟"=="一样,比较的是地址值,而比较两个对象的地址是没有意义的,一般都是比较对象的成员是否相等.
当父类方法无法满足子类需要的时候,需要重写
2.子类重写父类的equals方法
(1)至于怎么重写,我们可以先观察一下String类中的equals方法,观察String类中的equals方法的源码:
public boolean equals(Object anObject) {
//比较的是地址,提高了比较的效率
if (this == anObject) {
return true;
}
//先判断是否是String类,如果不是,就直接返回false,提高了
//安全性,也提高了效率
if (anObject instanceof String) {
//如果是,就先向下转型,把Object转为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;
}
(2)重写:可以自动生成
快捷方式:
idea:alt+ins
eclpise:alt+shift+s 再按H