当我查看Android对的hashCode
的“旧”版本时,其实现是在
Josh Bloch的有效Java - Best implementation for hashCode method
/**
* Compute a hash code using the hash codes of the underlying objects
* @return a hashcode of the Pair
*/
public int hashCode() {
int result = 17;
result = 31 * result + first.hashCode();
result = 31 * result + second.hashCode();
return result;
}
然而,当我查看Android Pair hashCode
的“最新”版本时,它看起来像这样
/**
* Compute a hash code using the hash codes of the underlying objects
*
* @return a hashcode of the Pair
*/
@Override
public int hashCode() {
return (first == null ? 0 : first.hashCode()) ^ (second == null ? 0 : second.hashCode());
}
我可以知道,有没有参考资料来源,为什么使用XOR
运算符?我以为我们不应该违反Josh Bloch的教导:)?
答案 0 :(得分:0)
目前尚不清楚为什么作者从素数技术转移到XOR技术,但是由于需要在null
类中支持Pair
值而导致更改。请参阅此提交:https://github.com/android/platform_frameworks_base/commit/162fabbcf81157fddab1c38de09bdabaff8c068a#diff-e73c0c4c169861c96264276ecce62169。理论上,如果两个对象都不是null
,那么实现可能使用旧版本,但如果两者都是,则hashCode变为该对的非null组件(或0
如果两者都为null )。