Перезаписанный метод equals() требует проверки на ноль? (Джава)

Я написал простой метод equals() для класса:

@Override
public boolean equals(Object obj) { 
    if(obj instanceof Cl) {
        Cl u = (Cl)obj;
        return u.i == i;
    } else {
        return false;
    }
}

Как я знаю, если я хочу сравнить, если объект класса равен нулевому объекту, это возвращает false из-за instanceof, но, по словам моего преподавателя uni, это плохая реализация, так как проверка на ноль отсутствует. Может ли кто-нибудь подтвердить для меня, верна ли моя теория или нет?

0
источник поделиться
2 ответа

Хотя ваш учитель был прав, чтобы убедиться, что проверка на ноль выполняется, выполнение obj instanceof cl достаточно для проверки на null. Причина в JLS, раздел 15.20.2:

Во время выполнения результат оператора instanceof равен true если значение RelationalExpression не равно null и ссылка может быть приведена к ReferenceType без ClassCastException. В противном случае результат false.

null значение, переданное вашему методу, приведет к возвращению false, как того требует контракт метода equals. Даже если вы явно не кодировали пустую проверку, instanceof все равно выдает false.

0
источник

Я думаю, null проверка не требуется и не должна быть там, потому что в этом случае не будет никаких ошибок во время компиляции или каких-либо исключений, если obj равен null, из-за проверки if (obj instaceof C1).

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос