0

我在官方文档中找不到任何信息。我知道Boolean.hashCode(boolean b)返回两个素数 1231 和 1237 表示真假。我希望在AtomicBoolean. 但是在反编译的类文件中,它似乎调用public native int hashCode();Object- 这是否意味着它将返回内存位置?

4

4 回答 4

3

包摘要说明了为什么hashCode不覆盖AtomicBoolean

原子类不是 java.lang.Integer 和相关类的通用替代品。它们不定义方法,equals例如hashCodecompareTo。(因为预计原子变量会发生变异,所以它们不是哈希表键的糟糕选择。)

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

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

于 2017-01-03T18:09:44.280 回答
2

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

这实际上很有意义。hashCode 的主要用例是让对象成为哈希映射的键,但是一旦键在映射中就发生变异是很危险的。由于 AtomicBoolean 的主要属性它的可变性,这使得它不适合 HashMap 键。

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

于 2017-01-03T18:09:21.290 回答
1

AtomicBoolean不会覆盖hashCode()(或equals(Object),就此而言)方法。它使用来自java.lang.Object. 尽管 JLS 没有指定它,但此实现通常只返回表示为int.

于 2017-01-03T18:07:52.343 回答
0

java.util.concurrent.atomic.AtomicBoolean 使用对象方法的哈希码,在类中没有被覆盖。所以它使用对象类的默认hascode。

于 2017-01-03T18:11:46.167 回答