相关疑难解决方法(0)

617
推荐指数
11
解决办法
57万
查看次数

关于平等的最佳做法:过载还是不过载?

请考虑以下代码段:

import java.util.*;
public class EqualsOverload {
    public static void main(String[] args) {
        class Thing {
            final int x;
            Thing(int x)          { this.x = x; }
            public int hashCode() { return x; }

            public boolean equals(Thing other) { return this.x == other.x; }
        }
        List<Thing> myThings = Arrays.asList(new Thing(42));
        System.out.println(myThings.contains(new Thing(42))); // prints "false"
    }
}
Run Code Online (Sandbox Code Playgroud)

注意contains返回false!!! 我们似乎失去了我们的东西!

这个bug,当然是事实,我们不小心过载,而不是,重写,Object.equals(Object).如果我们class Thing改为编写如下,contains则按true预期返回.

        class Thing {
            final …
Run Code Online (Sandbox Code Playgroud)

java overriding overloading equals

26
推荐指数
2
解决办法
1万
查看次数

标签 统计

equals ×2

java ×2

overriding ×2

hashcode ×1

overloading ×1