Непонятная часть кода

247
09 марта 2017, 21:57

Увидел задачу, суть которой была переопределить методы equals и hashcode чтобы сравнение объектов работало правильно. Так вот, что значит эта строка?

if (first != null ? !first.equals(solution.first) : solution.first != null)
        return false;
public class Solution {
private final String first, last;
public Solution(String first, String last) {
    this.first = first;
    this.last = last;
}
@Override
public boolean equals(Object o) {
    if (this == o)
        return true;
    if (o == null || getClass() != o.getClass())
        return false;
    Solution solution = (Solution) o;
    if (first != null ? !first.equals(solution.first) : solution.first != null)
        return false;
    if (last != null ? !last.equals(solution.last) : solution.last != null)
        return false;
    return true;
}
@Override
public int hashCode() {
    int result = first != null ? first.hashCode() : 0;
    result = 31 * result + (last != null ? last.hashCode() : 0);
    return result;
}
public static void main(String[] args) {
    Set<Solution> s = new HashSet<>();
    s.add(new Solution("Mickey", "Mouse"));
    System.out.println(s.contains(new Solution("Mickey", "Mouse")));
}
}
Answer 1

Тернарный оператор, как аргумент условного оператора - довольно забавно.

Вся строка эквивалентна классической записи:

if (first != null) {if (!first.equals(solution.first) return false;}
 else {if (solution.first != null) return false;}

Тернарный оператор вида (условие)? оператор1: оператор2; проверяет условие перед знаком вопроса и если оно истинно - выполняется оператор1 иначе выполняется оператор2. В данном конкретном коде подставляется одно из условий проверки в условный оператор if, в зависимости от того равно first null или нет.

если first = !null будет сформирован оператор:

if (!first.equals(solution.first) return false;

иначе, если first == null, будет сформирован оператор:

if (solution.first != null) return false;
Answer 2

Это тернарный оператор

(условие)?(вернуть это если условие верно):(вернуть это если условие не верно)

Пример

int x = 42;
int i = x == 42 ? 42 : -1; //в итоге i присваивается 42
READ ALSO
зачем нужен state в AbstractQueuedSynchronizer

зачем нужен state в AbstractQueuedSynchronizer

AbstractQueuedSynchronizer содержит внутреннее поле state0 и 1 зарезервированы для состояния - блокировки нет, и блокировка установлена

269
Как создать OSGi bundle для gradle в IntelliJ IDEA

Как создать OSGi bundle для gradle в IntelliJ IDEA

Пытаюсь создать новый модуль для готового проекта через File>New>Module и он даже позволяет что-то создатьНо никаких src\main

338
не отображается сообщение

не отображается сообщение

пишу программу на андройд не могу понять почему мой код не выводится в "textView"

249