return 值在 Hashcode 覆盖中如何工作?

How does the return value works in Hashcode override?

在下面的代码中,覆盖方法 hashCode returns 结果。为什么我们要在返回结果变量之前为其分配这么多值?我从一些教程中得到了以下代码:

public class User {
private String name;
private int age;
private String passport;

//getters and setters, constructor

@Override
public boolean equals(Object o) {

    if (o == this) return true;
    if (!(o instanceof User)) {
        return false;
    }

    User user = (User) o;

    return user.name.equals(name) &&
            user.age == age &&
            user.passport.equals(passport);
}

//Idea from effective Java : Item 9
@Override
public int hashCode() {
    int result = 17;
    result = 31 * result + name.hashCode();
    result = 31 * result + age;
    result = 31 * result + passport.hashCode();
    return result;
}

}

result的连续赋值是"scramble"其中包含的信息,并从其他来源添加更多信息。注意 result 在赋值的两边。从基值 17 开始,然后我们这样做几次:

result = 31 * result + someValue;

通过将 result 乘以 31,我们将现有值向左移动几位,然后通过向其添加另一个值来添加更多位。

这是为您可以定义的每个 User 对象提供公平唯一哈希码的非常快速的方法。