这究竟是做什么的?

时间:2015-09-20 22:03:25

标签: java

    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值是否彼此相等。我试图理解这是= =一条线告诉我的。

3 个答案:

答案 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在您的代码段中为真。这比任何事情都更优化,如果你知道你正在比较实际上是相同事物的两件事情,那么它可以避免进行额外的xy比较。您可以删除该检查并仍然获得相同的行为。

顺便说一句,这是许多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时,
  然后他们是平等的