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

时间:2016-03-14 00:51:27

标签: java hash hashcode

我有一个像这样的界面 -

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";
        }
    }

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

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

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

3 个答案:

答案 0 :(得分:1)

如果有三条评论没有向您提示您的问题,那么您有不同的类,您没有覆盖hashCode方法,以使用您的界面方法实际使您的类具有相同的哈希码。

答案 1 :(得分:1)

假设它们是两个不同的对象,如果要让它们相同,则需要覆盖哈希码方法。

答案 2 :(得分:1)

引自Object#hashCode()

的JavaDoc
  

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)

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