一个接口的两个完全相同的实现给出了不同的 .hashCode() 结果

Two exact same implementations of an interface are giving different .hashCode() results

我有这样的界面-

public interface myInterface {
    String getMyString();
}

还有两个这样的实现-

class test implements myInterface {

        @Override
        public String getMyString() {
            return "1,2";
        }
    }

class test2 implements myInterface {

        @Override
        public String getMyString() {
            return "1,2";
        }
    }

当我创建这两个类的新实例并执行 .hashCode 时,我得到了不同的 hashCode 值。为什么这样?

test test = new test();
test2 test2 = new test2();

System.out.println(test.hashCode());
System.out.println(test2.hashCode());

如果三个评论没有提示您解决问题,则您有不同的 类,因为您没有重写 hashCode 方法来实际使您的 类 具有相同的使用您的接口方法的哈希码。

因为它们是两个不同的对象,如果你想让它们相同,你需要覆盖哈希码方法。

引自 Object#hashCode()

的 JavaDoc

As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

除非您已覆盖 hashCode(),否则上述内容将是默认行为。