idea自动重写.equals方法最后一项勾选吗

利用idea快捷键重写equals() and hashCode() 方法,最后一步提示 Select all non-null fields ,是否勾选列出的变量?

1.不勾选生成的代码:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof User)) return false;
    User user = (User) o;
    return id == user.id &&
            Objects.equals(name, user.name) &&
            Objects.equals(accountName, user.accountName) &&
            Objects.equals(password, user.password);
}

@Override
public int hashCode() {
    return Objects.hash(name, accountName, password, id);
}

2.勾选生成的代码:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof User)) return false;
    User user = (User) o;
    return id == user.id &&
            name.equals(user.name) &&
            accountName.equals(user.accountName) &&
            password.equals(user.password);
}

@Override
public int hashCode() {
    return Objects.hash(name, accountName, password, id);
}

请问二者有什么区别?

区别在于Object.equals()这个方法。
拿name字段举例:
如果勾选,使用name.equals(user.name)进行比较,如果name为null,则会抛出空指针异常;
如果不勾选,使用Objects.equals(name, user.name)进行比较,会先对name进行非空检查。

img