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返回true;
答案 0 :(得分:8)
你没有凌驾于equals(Object)
。参数必须是Object
,而不是StringTestA
。而是重载 equals
(使用相同的名称创建不同的方法)。
始终使用@Override
注释要覆盖的方法。如果您碰巧在方法声明中出错,这样做会导致编译错误,就像您在此处所做的那样。
@Override
public boolean equals(Object obj) {
//...
}