1. Почему в методе equals проверку first на null нельзя записать так:
if (first == null || s.first == null) return false;
2. Почему в методе hashCode нельзя было оставить так:
return 31 * first.hashCode() + last.hashCode());
Спасибо.
/**
 В классе Solution исправить пару методов equals/hashCode в соответствии с правилами реализации этих
 методов(детали уточни у своего любимого поисковика).
 Обе строки first и last должны принимать участие в сравнении с помощью метода equals и вычислении hashcode.
 Метод main не участвует в тестировании.

 Требования:
 1. Хешкоды одинаковых объектов должны быть равны.
 2. Метод equals должен проверять равен ли переданный объект текущему(сравнение через ==).
 3. Метод equals должен проверять является ли переданный объект объектом класса Solution.
 4. Метод equals должен возвращать true в случае, если поля first и last равны у переданного объекта
 и текущего(не забудь что они могут быть равны null).
 5. Должно быть обеспечено корректное поведение HashSet с типом элементов Solution.
 */
public class Solution {
    private final String first, last;

    public Solution(String first, String last) {
        this.first = first;
        this.last = last;
    }

    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof Solution))
            return false;
        Solution s = (Solution) o;
        if (first != null ? !first.equals(s.first) : s.first != null) return false;
        return last != null ? last.equals(s.last) : s.last == null;
    }

    public int hashCode() {
        int result = first != null ? first.hashCode() : 0;
        result = 31 * result + (last != null ? last.hashCode() : 0);
        return result;
//        return 31 * first.hashCode() + last.hashCode();
    }