如何返回<boolean exp =“”> || <object exp =“”>`返回对象的方法的有效return语句?

时间:2018-10-27 23:06:04

标签: java return-type boolean-expression short-circuiting

我正在看书,看到了以下代码:

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

后一个表达式很好,因为它返回Animal或null。不过,前一个表达式令人困惑,因为它只是一个布尔表达式。

我做了一个测试班,叫getWinner(null)。它返回了null。据我所知,animals == null是正确的,该表达式会短路,我希望该方法返回true而不是null

此行如何编译,甚至可以按预期工作?

1 个答案:

答案 0 :(得分:3)

这与Java中的operator precedence有关,并且将首先执行哪个运算符-布尔或三进制。

三元组的优先级较低,因此将首先对or进行求值,这意味着带有括号的情况将如下所示:

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

所以整行的结果要么是return null要么是return animals.get(0)