【发布时间】:2012-06-06 13:35:10
【问题描述】:
这是第 9 项的示例代码:
public final class PhoneNumber {
private final short areaCode;
private final short prefix;
private final short lineNumber;
@Override
public int hashCode() {
int result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
return result;
}
}
Pg 48 状态:“选择值 31 是因为它是一个奇素数。如果它是偶数并且乘法溢出,则信息将丢失,因为乘以 2 是等价的转移。”
我理解乘以 2 的概念相当于位移。我也知道当我们将一个大数乘以一个大奇数素数时,我们仍然会出现溢出(因此信息丢失)。我不明白为什么与大奇数相乘引起的信息丢失比由大偶数相乘引起的信息丢失更可取。
【问题讨论】:
-
除了 2,没有其他偶数是素数
-
天哪!我不敢相信我忘记了这一点。我想我今天刚刚度过了一个愚蠢的时刻。谢谢:)
-
这可能是 stackoverflow.com/questions/299304/… 的副本。
标签: java hashcode effective-java