2010-12-31 9 views

答えて

6

完全に2つの異なる概念です。上記の例で

Cat oldCat = new Cat(); 
Cat newCat = new Cat(); 
Cat oldCatRef = oldCat; 

oldCatoldCatRefが同じオブジェクトへの参照です。それらは同じオブジェクトを参照するので、それらのハッシュコードは等しくなります。

しかし、oldCatnewCatは同じオブジェクトを参照していません。それらは2つの異なるオブジェクトへの参照です。しかし、彼らはその実装に基づいて同じhashCodeを持っているかもしれません。 hashCodeは、単にオーバーライドできるObjectクラスのメソッドです。 (PeterJから)

EDIT: oldCat.equals(newCat)は、2つのハッシュコードが同じでなければならない場合、JavaSE6オブジェクトの仕様によります。それは良いプログラミングは、その契約によって従うことです

あなたはおそらく同様に、この質問に対する答えをチェックしたい:オブジェクトのハッシュコードと参照またはアドレスとの間

difference between hash code and reference or address of an object?

+0

JavaSE6 Objectの仕様によると、oldCat.equals(newCat)の場合、2つのハッシュコードは等しいはずです。その契約に従うことは良いプログラミングです。 – Shawn

+0

@peterJ提案に感謝します!答えを更新しました。 – rkg

7

オブジェクトへの参照は、それだけです。オブジェクトへの参照。

オブジェクトのハッシュコードは、実装によってはさまざまなものがありますhashCode()メソッドの結果です。デフォルトhashCode()

は、典型的には、整数にオブジェクトの内部アドレスを変換することによって実現されるが、この実装技術は、2つの異なるオブジェクトが同じhashCodeを持つことができるのJavaTMプログラミング言語

+0

64ビットJVMでは、参照は通常8バイトを使用し、hashCode()は32ビットのみです。 –

3

によって必要とされません。 referenceは、hashCodeが便利な計算属性であるオブジェクトへのユニークなポインタです。

関連する問題