相关疑难解决方法(0)

为什么我需要覆盖Java中的equals和hashCode方法?

最近我读了这个 Developer Works文档.

该文档是关于定义hashCode()equals()有效和正确的,但我无法弄清楚为什么我们需要覆盖这两种方法.

如何有效地实施这些方法?

java equals hashcode

355
推荐指数
15
解决办法
39万
查看次数

当我覆盖equals()方法时,为什么要覆盖hashCode()?

好吧,我从许多地方和消息来源得知,每当我覆盖equals()方法时,我都需要覆盖hashCode()方法.但请考虑以下代码

package test;

public class MyCustomObject {

    int intVal1;
    int intVal2;

    public MyCustomObject(int val1, int val2){
        intVal1 = val1;
        intVal2 = val2;
    }

    public boolean equals(Object obj){
        return (((MyCustomObject)obj).intVal1 == this.intVal1) && 
                (((MyCustomObject)obj).intVal2 == this.intVal2);
    }

    public static void main(String a[]){
        MyCustomObject m1 = new MyCustomObject(3,5);
        MyCustomObject m2 = new MyCustomObject(3,5);
        MyCustomObject m3 = new MyCustomObject(4,5);

        System.out.println(m1.equals(m2));
        System.out.println(m1.equals(m3));
    }
}
Run Code Online (Sandbox Code Playgroud)

这里输出是真的,完全按照我想要的方式错误,我根本不关心覆盖hashCode()方法.这意味着hashCode()覆盖是一个选项而不是每个人都说的强制选项.

我想要第二次确认.

java equals hashcode

29
推荐指数
3
解决办法
2万
查看次数

标签 统计

equals ×2

hashcode ×2

java ×2