Подскажите, пожалуйста, насколько верно решение сравнивать строки с "==" (вернее не сами строки, а их переменные-ссылки) в задачи нужно было переопределить equals
public boolean equals(Object o) {
    if(o == null){
        return false;
    }
    if(this == o){
        return true;
    }
    if(!(o instanceof Solution)){
        return false;
    }
    Solution n = (Solution) o;
    return first == (n.first) && last == (n.last);
}
решил таким образом. прошу отметить, что я сравнил здесь
first == (n.first) && last == (n.last);
? ссылочные переменные? подскажите, пожалуйста, как работает в правильном решении
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Solution)) return false;

    Solution solution = (Solution) o;

    if (first != null ? !first.equals(solution.first) : solution.first != null) return false;
    return last != null ? last.equals(solution.last) : solution.last == null;
}
используется equals. насколько я понял, используется тот самый, который переопределен в классе String