在Android Pair的hashCode实现中是否有任何参考源,它使用XOR运算符

时间:2014-12-06 16:21:32

标签: java android

当我查看Android对的hashCode的“旧”版本时,其实现是在

中的文字后面

Josh Bloch的有效Java - Best implementation for hashCode method

"Old" Pair.java

/**
 * 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的“最新”版本时,它看起来像这样

"New" Pair.java

/**
 * 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的教导:)?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚为什么作者从素数技术转移到XOR技术,但是由于需要在null类中支持Pair值而导致更改。请参阅此提交:https://github.com/android/platform_frameworks_base/commit/162fabbcf81157fddab1c38de09bdabaff8c068a#diff-e73c0c4c169861c96264276ecce62169。理论上,如果两个对象都不是null,那么实现可能使用旧版本,但如果两者都是,则hashCode变为该对的非null组件(或0如果两者都为null )。