equals
メソッドは一貫しhashCode
ている必要があります。つまり、2 つのオブジェクトがメソッドに従って等しい場合equals
、それらのhashCode
メソッドは同じハッシュ値を返す必要があります。
hashCode() メソッドをオーバーライドしない場合、Java は一意のハッシュ コードを返します。
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");
}
}
行のコメントを外すとコンパイルエラーが発生するのはなぜですか?
オブジェクトのハッシュ コードが等しくない場合、既定のハッシュ コードが異なるのに等しいと表示されるのはなぜですか?