equals and hashCode method must be consistent, which means that when two objects are equal according to equals method their hashCode method should return the same hash value.
Java returns a unique hash code if we do not override the hashCode() method.
class HashValue {
    int x;
    public boolean equals(Object oo) {
        // if(oo instanceof Hashvalue) uncommenting ths gives error.dunno why?
        // :|
        HashValue hh = (HashValue) oo;
        if (this.x == hh.x)
            return true;
        else
            return false;
    }
    HashValue() {
        x = 11;
    }
}
class Hashing {
    public static void main(String args[]) {
        HashValue hv = new HashValue();
        HashValue hv2 = new HashValue();
        System.out.println(hv.hashCode());
        System.out.println(hv2.hashCode());
        if (hv.equals(hv2))
            System.out.println("EQUAL");
        else
            System.out.println("NOT EQUAL");
    }
}
Why does uncommenting the line gives compilation error?
If the objects have unequal hash codes, why are they shown equal even though the default hashcode varies?
 
     
     
     
     
     
     
     
     
     
    