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

176
24 ноября 2017, 06:57

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

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

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

Answer 1

То, что в скобках:

Если name == null, вычисляется "!name.equals(human.name)"

Если нет, вычисляется "human.name != null"

Оба выражения возвращают тип boolean.

Ну и выражение за скобками: если (найденный boolean == true) вернуть false.

Answer 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;
}
READ ALSO
Многоразовый вызов метода потоком

Многоразовый вызов метода потоком

В процессе изучения многопоточности JAVA возник вопрос:

180
Неравенство Коши на языке java

Неравенство Коши на языке java

Есть неравенство КошиПользователь задает значение n

238
Создание GUI на Java в IntelliJIDEa

Создание GUI на Java в IntelliJIDEa

Создаю новый проект, в нем класс и форму, добавляю в JPanel кнопку, но почему-то не могу ни поменять её размер, ни перетащить в другое место на панели,...

253