我无法在官方文档中找到任何信息。我知道Boolean.hashCode(boolean b)
返回两个素数1231和1237的真和假。我希望AtomicBoolean
中有类似的实现。但是在反编译的类文件中,它似乎调用public native int hashCode();
的{{1}} - 这是否意味着它将返回内存位置?
答案 0 :(得分:3)
package summary说明hashCode
未覆盖AtomicBoolean
的原因:
原子类不是java.lang.Integer和相关类的通用替换。他们没有定义
equals
,hashCode
和compareTo
等方法。 (因为预期原子变量会发生变异,所以它们对哈希表键的选择很差。)
是否意味着它会返回内存位置?
这取决于您使用的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。