公式ドキュメントに情報が見つかりませんでした。 Boolean.hashCode(boolean b)
は、真と偽の2つの素数1231と1237を返します。私はAtomicBoolean
の同様の実装を望んでいます。しかし、逆コンパイルされたクラスファイルではpublic native int hashCode();
がObject
と表示されているようです - それはメモリの場所を返しますか?AtomicBooleanのhashCodeとは何ですか?
答えて
hashCode
がAtomicBoolean
でオーバーライドされていない理由package summary伝えます:
アトミッククラスは、java.lang.Integerのと関連するクラスのための汎用的な代替品ではありません。彼らは
equals
,hashCode
およびcompareTo
のようなメソッドを定義しません。それはそれはメモリ位置を返します(アトミック変数が変異していることが期待されているので、彼らはハッシュテーブルキーの貧弱な選択です。)
を意味するのでしょうか?
どのJVMを使用するかによって異なりますが、通常はメモリアドレスから派生しています。他のJVMは乱数を使うだけかもしれません。
AtomicBoolean
hashCode()
(またはその点についてはequals(Object)
)の方法を上書きしません。それはjava.lang.Object
のデフォルト実装を使用します。この実装は、JLSによって指定されていませんが、通常は、int
で表されるオブジェクトの内部アドレスを返します。
AtomicBooleanは、hashCode(またはequals)をオーバーライドしないため、デフォルトのObjectビヘイビアを継承します。
これは実際にはかなり意味があります。 hashCodeの主な使用例は、オブジェクトをハッシュマップのキーにすることですが、それはdangerous to mutate keys once they're in a mapです。 AtomicBoolean の主な属性はであるため、これはHashMapキーの候補になりません。
つまり、HashMapキーにする必要がある場合は、それを変更しないでください。変更するつもりがない場合は、AtomicBooleanを使用しないでください。
java.util.concurrent.atomic.AtomicBooleanは、オブジェクトメソッドのハッシュコードを使用します。これは、クラス内でオーバーライドされません。オブジェクトクラスのデフォルトのhascodeを使用します。
- 1. `##`と `hashCode`の違いは何ですか?
- 2. `hashCode`のデフォルトの実装は何ですか?
- 3. Any型のオブジェクトに対するHashcodeのScala実装とは何ですか?
- 4. hashCode()の戻り値とhashTableのキーの違いは何ですか?
- 5. AtomicBooleanをチェックして何かを実行する最も安全な方法は何ですか?
- 6. javaのhashCode()は決定的ですか?
- 7. のhashCode()とNullPointerExceptionが
- 8. ハッシュマップオーバーライドequalsとhashcode
- 9. Hibernateは、フェッチ、HQLとhashCode()
- 10. gettersはequalsとhashcodeで使用できますか?
- 11. ScalaでequalsとhashCodeを実装するための標準的なイディオムは何ですか?
- 12. AtomicBooleanは "safe-thread"を保証しますか?
- 13. Java - hashCodeとtoStringのオーバーライド
- 14. ZonedDateTime is isqual()と一貫性のあるhashCode()ですか?
- 15. JavaScriptはGuavaのHashCodeに相当しますか? Javaでは
- 16. javaのequalsとhashcodeをオーバーライドするタイミング
- 17. hashcode()とequals()について
- 18. ObjectでequalsとhashCodeが定義されているのはなぜですか?
- 19. AtomicBooleanの並列バージョンは機能しません - エージェントバージョンは
- 20. は、クラスオブジェクトの場合にのみhashcode()が必要ですか?
- 21. すべてのクラスは.equalsメソッドと.hashcodeメソッドを持つべきですか?
- 22. いつhashcodeとequalsメソッドが必要ですか?
- 23. JSON4S hashCodeメソッドをキーとして使用できますか?
- 24. hashCode()およびgetClass()のネイティブメソッドはなぜですか?
- 25. HashMap実装:--- hashcode
- 26. equalsメソッドとhashCodeメソッドを使用した汎用インターフェースは可能ですか?
- 27. AtomicBooleanにnegate()メソッドがありませんか?
- 28. JavaのhashCodeはHashMapで動作しませんか?
- 29. Javaで配列hashcode()がどのように計算されるか。配列の場合のhashcode()の実装
- 30. hibernateはequals()とhashCode()をどのように使用しますか?
あなたは単にそれを試して、何が起こるか見ることができます。 – luk2302