Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Разбор условия if(?:) return;

#java


Подскажите пожалуйста, как можно озвучить данное условие if()

if (name == null ? !name.equals(human.name) : human.name != null) return false;


Мое предположение:
Если name пуст, то если name не равно human.name ...дальше мысль теряется. Иначе
если name не пустой, то если human.name не пустой ... та же ерунда мысль не улавливаю.
При каком из вышеперечисленных и совпадающих условий return false;?
    


Ответы

Ответ 1



То, что в скобках: Если name == null, вычисляется "!name.equals(human.name)" Если нет, вычисляется "human.name != null" Оба выражения возвращают тип boolean. Ну и выражение за скобками: если (найденный boolean == true) вернуть false.

Ответ 2



Вообще, в таким случаях надо по шагам преобразовывать код: if (name == null ? !name.equals(human.name) : human.name != null) return false; 1 шаг: выделяем boolean boolean flag = name == null ? !name.equals(human.name) : human.name != null; if (flag) { return false; } 2 шаг: превращаем оператор ?: в просто if boolean flag; if(name == null) { flag = !name.equals(human.name); // null.equals(human.name); - выкинет NullPointerException } else { flag = human.name != null; } if (flag) { return false; } 3 шаг: учитывая NullPointerException при !name.equals(human.name); код будет равным такому: if(name == null) { throw new NullPointerException(); } if (human.name != null) { return false; }

Комментариев нет:

Отправить комментарий