什么是AtomicBoolean的hashCode?

时间:2017-01-03 18:04:02

标签: java hashcode atomicboolean

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

4 个答案:

答案 0 :(得分:3)

package summary说明hashCode未覆盖AtomicBoolean的原因:

  

原子类不是java.lang.Integer和相关类的通用替换。他们没有定义equalshashCodecompareTo等方法。 (因为预期原子变量会发生变异,所以它们对哈希表键的选择很差。)

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

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

答案 1 :(得分:2)

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

这实际上很有意义。 hashCode的主要用例是让对象成为哈希映射的关键,但它是dangerous to mutate keys once they're in a map。由于AtomicBoolean 的主要属性其可变性,这使得它成为HashMap密钥的不良候选者。

换句话说:如果你需要它作为HashMap键,你不应该改变它,如果你不想改变它,那么你就不应该使用AtomicBoolean。

答案 2 :(得分:1)

AtomicBoolean不会覆盖hashCode()(或equals(Object))方法。它使用java.lang.Object中的默认实现。虽然它没有由JLS指定,但此实现通常只返回表示为int的对象的内部地址。

答案 3 :(得分:0)

java.util.concurrent.atomic.AtomicBoolean使用对象方法的hashode,它在类中没有被覆盖。因此它使用对象类的defult hascode。