我在官方文件里找不到任何信息。我知道Boolean.hashCode(boolean b)返回真和假的两个素数1231和1237。我希望在AtomicBoolean中有一个类似的实现。但是在反编译的类文件中,它似乎调用了public native int hashCode(); of Object -这是否意味着它将返回内存位置?
发布于 2017-01-03 18:09:44
包装摘要告诉我们为什么hashCode没有被AtomicBoolean覆盖。
原子类不是java.lang.Integer和相关类的通用替代品。它们没有定义
equals、hashCode和compareTo等方法。(因为原子变量预期会发生变异,所以它们是哈希表键的糟糕选择。)
是否意味着它将返回内存位置?
这取决于您使用的JVM,但是是的,它通常是从内存地址派生的。其他JVM可能只使用一个随机数。
发布于 2017-01-03 18:09:21
AtomicBoolean不覆盖hashCode (或等于),因此它继承了默认的对象行为。
这其实很有道理。hashCode的主要用例是让对象成为散列映射的键,但它是一旦钥匙在地图上变异就很危险。由于AtomicBoolean的主要属性是它的可变性,这使得它成为HashMap密钥的坏候选。
换句话说:如果您需要它成为一个HashMap密钥,就不应该对它进行变异,如果您不打算对它进行变异,那么您就不应该使用AtomicBoolean。
发布于 2017-01-03 18:07:52
AtomicBoolean不覆盖hashCode() (或equals(Object) )方法。它使用来自java.lang.Object的默认实现。虽然JLS没有指定它,但这个实现通常只返回表示为int的对象的内部地址。
https://stackoverflow.com/questions/41449690
复制相似问题