这是第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;
}
}
第48页写道:"选择值31是因为它是个奇质数。如果选偶数并且乘法溢出,信息就会丢失,因为乘以2等同于移位操作。"
我理解乘以2等同于位移的概念。我也知道当我们用大的奇质数去乘以一个大数时,仍然会发生溢出(因此会有信息丢失)。但我不明白为什么因为大奇质数导致的信息丢失比因为大偶数导致的信息丢失更可取。