Как это `возвращение||`допустимый оператор возврата для метода, который возвращает объект? - PullRequest
0 голосов
/ 28 октября 2018

Я читал книгу и увидел этот код:

public Animal getWinner(List<Animal> animals) {
    return animals == null || animals.size() == 0 ? null : animals.get(0);
}

Последнее выражение прекрасно, так как возвращает Animal или ноль.Однако первое выражение озадачивает, поскольку это просто логическое выражение.

Я создал тестовый класс и назвал getWinner(null).Вернул null.Насколько я знаю, animals == null будет истинным, выражение будет закорочено, и я ожидаю, что метод вернет true вместо null.

Как компилируется эта строка, и дажеработать как положено?

1 Ответ

0 голосов
/ 28 октября 2018

Это связано с приоритетом оператора в Java и какой оператор - логический или троичный будет выполняться первым.

Тернар имеет более низкий приоритет, поэтому or будет оцениваться первым, то есть это будет выглядеть так с круглыми скобками:

return (animals == null || animals.size() == 0) ? null : animals.get(0);

Таким образом, результат всей строки будет либо return null, либо return animals.get(0).

...