Метод equals()
public class User {
public Integer id;
public String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
return o instanceof User &&
id != null &&
id.equals(((User) o).id);
}
}
Метод equals() используется для сравнения двух объектов на равенство. Он определен в классе Object и, по умолчанию, выполняет сравнение ссылок на объекты (то есть проверяет, являются ли объекты одним и тем же объектом в памяти). Многие классы переопределяют этот метод, чтобы сравнивать содержимое объектов, а не только ссылки.
Контракт equals
При переопределении метода equals разработчик должен придерживаться основных правил, определенных в спецификации языка Java.
Рефлексивность: для любого заданного значения x, выражение x.equals(x) должно возвращать true.
Заданного — такого, что x != null
Симметричность: для любых заданных значений x и y, x.equals(y) должно возвращать true только в том случае, когда y.equals(x) возвращает true.
Транзитивность: для любых заданных значений x, y и z, если x.equals(y) возвращает true и y.equals(z) возвращает true, x.equals(z) должно вернуть значение true.
Согласованность: для любых заданных значений x и y повторный вызов x.equals(y) будет возвращать значение предыдущего вызова этого метода при условии, что поля, используемые для сравнения этих двух объектов, не изменялись между вызовами.
Сравнение с null: для любого заданного значения x вызов x.equals(null) должен возвращать false.