In the below code, the overridden method hashCode returns the result. Why are we assigning so many values to result variable before returning it? I got the below code from some tutorials:
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;
}
}
 
    