什么是原子布尔值的哈希代码



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

软件包摘要说明了为什么hashCode没有被覆盖AtomicBoolean

原子类不是 java.lang.Integer 和相关类的通用替代品。它们没有定义诸如equalshashCodecompareTo等方法。(由于原子变量预计会发生突变,因此它们是哈希表键的糟糕选择。

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

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

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

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

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

>AtomicBoolean不会覆盖hashCode()(或equals(Object),就此而言)方法。它使用 java.lang.Object 中的默认实现。尽管 JLS 未指定,但此实现通常只返回表示为 int 的对象的内部地址。

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

相关内容

  • 没有找到相关文章