同一对象不同的哈希码?

0 java hashcode

class Rational {
    int num = 0;
    int denom = 0;
    public Rational(int num, int denom) {
        this.num = num;
        this.denom = denom;
    }

public static void main(String[] args) {
    Rational r1 = s.new Rational(1, 1);
    Rational r2 = s.new Rational(1, 1);
    System.out.println(r1.hashCode());
    System.out.println(r2.hashCode());
Run Code Online (Sandbox Code Playgroud)

}

我有两个相同的对象,但是它们具有不同的hashCode。这是为什么?我尝试覆盖Rational中的.equal方法,因此r1.equals(r2)== true。但是它们仍然产生不同的Java hashCode。

Jer*_*vel 5

它们不是同一对象。它们是两个具有相同值的不同对象。仅仅因为世界上还有另一个Jeroen Vannevel,并不意味着是我。

hashCode()没有联系equals():他们俩都必须遵守合同,并且彼此有联系,但彼此之间不会直接产生影响。这就是为什么您应该始终覆盖这两种方法而不仅仅是一种方法的原因。