什么是原子布尔的哈希码?

6jygbczu  于 2021-07-12  发布在  Java
关注(0)|答案(4)|浏览(407)

这个问题在这里已经有答案了

为什么两个原子整数永远不相等(9个答案)
四年前关门了。
我在官方文件里找不到任何信息。我知道 Boolean.hashCode(boolean b) 返回true和false的两个素数1231和1237。我希望在中国也能得到类似的实施 AtomicBoolean . 但在反编译的类文件中,它似乎调用 public native int hashCode();Object -这是否意味着它将返回内存位置?

uyhoqukh

uyhoqukh1#

包摘要说明了原因 hashCode 不为覆盖 AtomicBoolean :
原子类不是java.lang.integer和相关类的通用替代品。它们不定义方法,例如 equals , hashCode 以及 compareTo . (因为原子变量预期会发生变异,所以它们是哈希表键的糟糕选择。)
这是否意味着它将返回内存位置?
这取决于您使用的jvm,但是是的,它通常是从内存地址派生的。其他JVM可能只使用一个随机数。

ui7jx7zq

ui7jx7zq2#

atomicboolean不重写hashcode(或equals),因此它继承默认的对象行为。
这其实很有道理。hashcode的主要使用情形是让对象成为hashMap的键,但是一旦键在Map中就改变它们是危险的。由于atomicboolean的主要属性是它的可变性,这使得它不适合作为hashmap键。
换句话说:如果需要它作为hashmap键,就不应该对它进行变异,如果不打算对它进行变异,就不应该使用atomicboolean。

kyvafyod

kyvafyod3#

AtomicBoolean 不重写 hashCode() (或 equals(Object) ,为此)方法。它使用来自的默认实现 java.lang.Object . 尽管jls没有指定它,但是这个实现通常只返回表示为 int .

6g8kf2rb

6g8kf2rb4#

atomicboolean使用对象方法的hashode,该hashode在类中不被重写,因此它使用对象类的defult hascode。

相关问题