Я видел код ниже онлайн. класс переопределяет методы hashCode() и equals класса Object. Мне просто интересно, почему оператор возврата метода equals() должен использовать альтернативные && и ||? Могу ли я просто использовать && до конца? есть ли какая-то особая причина, по которой он должен использовать альтернативные && и ||?
class Person {
private int id;
private String firstName;
private String lastName;
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
Person guest = (Person) obj;
return id == guest.id
&& ((firstName == null ? guest.firstName == null : firstName.equals(guest.firstName))
|| (firstName != null && firstName.equals(guest.getFirstName())))
&& ((lastName == null ? guest.lastName == null : lastName.equals(guest.lastName))
|| (lastName != null && lastName.equals(guest.getLastName())));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + id;
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
}
equals
метод очень трудно понять в его нынешнем виде. Я предлагаю разбить его на несколько операторов if, чтобы сделать его более читаемым. - person Eran   schedule 10.04.2016