在java中实现equals方法

use*_*490 5 java

这是我对Coor类的equals类的实现,它只包含2个整数x和y.这是实现这种方法的正确方法吗?

 public boolean equals(Object obj) {
        if (obj == null || obj.getClass() != this.getClass()) {
            return false;
        }
        Coor temp = (Coor) obj;
        if (temp.x == this.x && temp.y == this.y) {
            return true;
        } else {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Pat*_*Pat 7

你可以添加一个检查反身相等(等于self):

 public boolean equals(Object obj) {

    // Reflexive equality: did I get passed myself?
    if(this == obj){
        return true;
    }

    if (obj == null || obj.getClass() != this.getClass()) {
        return false;
    }

    Coor temp = (Coor) obj;
    return temp.x == this.x && temp.y == this.y;
}
Run Code Online (Sandbox Code Playgroud)


Bil*_*l K 5

是的,它会的.

还要确保覆盖你的hashCode()方法 - 永远不要覆盖一个而不做另一个,它会混淆你的集合中的地狱.

你的情况可以使用一个哈希,它只是简单地移动一个int 32位并将其添加到另一个创建一个完全唯一的long(在这种情况下是一个完美的哈希函数 - 没有冲突)