class Object{
String x;
int y;
Object (String a, int b){
this.x = a;
this.y = b;
@Override
boolean equals(Object obj){
return (this.x.equals(obj.x)) && this.y == obj.y);
}
}
这里我试图编写一个覆盖equals()的方法,以便同时将两个值(字符串和整数)等同起来。为了测试字符串相等性,我使用了我重写的原始equals()方法。
我可以毫无错误地执行此操作吗?或者我可以不在覆盖它的方法中使用原始的equals()方法吗?有没有更好的方法来实现这一目标?
我无法在线找到这个问题的答案,但这可能是因为不了解这种情况的技术措辞。
谢谢
答案 0 :(得分:2)
我认为问题在于您没有正确覆盖Object.equals()方法。如果您正在尝试检查String和int是否相等以使对象相等,则听起来您希望新对象表示String和int共同表示的内容:
class MyObj {
private String str;
private int num;
...
}
(使用适当的getter和setter方法)
然后你可以像这样覆盖MyObj.equals():
@Override
boolean equals(MyObj that){
/* First check for null and all that stuff */
...
return this.str.equals(that.getStr()) && this.num == that.getNum();
}
答案 1 :(得分:1)
呼叫:
super.whatevername();
或者在这种情况下:
super.equals(someObject);
这将调用超类'方法
顺便说一下,equals的原始方法是
public boolean equals(Object obj)
顺便说一句,您的整个返回区块可以替换为:
return (this.x.equals(obj.x)) && this.y == obj.y);
你这样做的方式效率低下让我感到畏缩:/