public boolean equals(Object a){
if(this == a){
return true;
}
if(!(a instanceof OrderedDoublePair)){
return false;
}
return (((OrderedDoublePair)a).getx()==this.x && ((OrderedDoublePair)a).gety()==this.y);
}
我想弄清楚if(this == a)的行是什么。我正在创建一个名为OrderedDoublePair的新类,它表示x和y坐标。该方法应检查对象参数是否为OrderedDoublePair,然后检查每个ordereddoublepair的x和y值是否彼此相等。我试图理解这是= =一条线告诉我的。
答案 0 :(得分:4)
this == a
只检查a
是否调用equals
的实例;即如果你有类似的东西:
OrderedDoublePair a = ...;
OrderedDoublePair b = a; // a and b now refer to the same instance of OrderedDoublePair
...
if (a.equals(b)) { // <---
...
}
然后this == a
在您的代码段中为真。这比任何事情都更优化,如果你知道你正在比较实际上是相同事物的两件事情,那么它可以避免进行额外的x
和y
比较。您可以删除该检查并仍然获得相同的行为。
顺便说一句,这是许多equals
方法中常见的习语。例如,看一下String#equals
的前几行:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
答案 1 :(得分:2)
this == a
正在检查被比较的两个对象是否完全相同,即a和this都是对同一对象的两个引用。
答案 2 :(得分:0)
此函数equals()用于定义比较两个对象是否彼此相等的特定方式:
1)如果它们是同一个物体(物体),那么我们说它们是相同的。
2)如果输入a不是OrderedDoublePair类的对象,则不等于。
3)否则,当且仅当两个OrderedDoublePair对象具有相同的x和y时,
然后他们是平等的