IDE:Eclipse;语言:Java核心
package p1;
public class StringTestA {
/**
* @param args
*/
public static void main(String[] args) {
Object o1 = new StringTestA();
Object o2 = new StringTestA();
StringTestA o3 = new StringTestA();
StringTestA o4 = new StringTestA();
if (o1.equals(o2)) {
System.out.println("Object o1 and o2 are eqals");
}
if (o3.equals(o4)) {
System.out.println("Object o3 and o4 are eqals");
}
}
public boolean equals(StringTestA other) {
System.out.println("StringTestA equals mathod reached");
return true;
}
}
输出:
StringTestA equals method reached
Object o3 and o4 are equals
如果不覆盖等于则无输出。
问题:为什么
System.out.println("Object o1 and o2 are eqals");
行没有被打印成等号,返回真; 最佳答案
您没有覆盖equals(Object)
。参数必须是Object
,而不是StringTestA
。相反,您正在重载equals
(创建具有相同名称的其他方法)。
始终用@Override
注释要覆盖的方法。如果您像在此所做的那样在方法声明中犯了一个错误,这样做将导致编译错误。
@Override
public boolean equals(Object obj) {
//...
}