AtomicBoolean 的 hashCode 是什么?

What is the hashCode of an AtomicBoolean?

我在官方文档中找不到任何信息。我知道 Boolean.hashCode(boolean b) return 是两个质数 1231 和 1237,分别代表真假。我希望在 AtomicBoolean 中有类似的实现。但是在反编译的 class 文件中,它似乎调用了 Objectpublic native int hashCode(); - 这是否意味着它会 return 内存位置?

AtomicBoolean 不会覆盖 hashCode()(或 equals(Object))方法。它使用 java.lang.Object 中的默认实现。尽管 JLS 未指定,但此实现通常只是 returns 表示为 int.

的对象的内部地址

AtomicBoolean 不会覆盖 hashCode(或等于),因此它继承了默认的 Object 行为。

这其实很有道理。 hashCode的主要用例是让对象成为hash map的key,不过是dangerous to mutate keys once they're in a map。由于 AtomicBoolean 的主要属性是 它的可变性,这使得它不适合作为 HashMap 键。

换句话说:如果你需要它成为一个 HashMap 键,你不应该改变它,如果你不打算改变它,那么你不应该使用 AtomicBoolean。

package summary 说明了为什么 hashCode 没有被 AtomicBoolean 覆盖:

Atomic classes are not general purpose replacements for java.lang.Integer and related classes. They do not define methods such as equals, hashCode and compareTo. (Because atomic variables are expected to be mutated, they are poor choices for hash table keys.)

这是否意味着它将 return 内存位置?

这取决于您使用的 JVM,但是是的,它通常是从内存地址派生的。其他 JVM 可能只使用随机数。

java.util.concurrent.atomic.AtomicBoolean 使用对象方法的哈希值,它在 class.so 中没有被覆盖它使用对象 class.

的默认 hascode