我正在看书,看到了以下代码:
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
。
此行如何编译,甚至可以按预期工作?
答案 0 :(得分:3)
这与Java中的operator precedence有关,并且将首先执行哪个运算符-布尔或三进制。
三元组的优先级较低,因此将首先对or
进行求值,这意味着带有括号的情况将如下所示:
return (animals == null || animals.size() == 0) ? null : animals.get(0);
所以整行的结果要么是return null
要么是return animals.get(0)
。