Pascal4eg / Java

 Java | Фишки и трюки

Метод 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.