`return <boolean exp> || 怎么样?<Object exp>`

我正在看书,看到了这段代码:


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.


该行如何编译,甚至按预期工作?


一只萌萌小番薯
浏览 210回答 1
1回答

慕姐4208626

这与Java 中的运算符优先级以及哪个运算符(布尔值或三元)将首先执行有关。三元具有较低的优先级,因此or将首先评估,这意味着它看起来像这样带括号:return&nbsp;(animals&nbsp;==&nbsp;null&nbsp;||&nbsp;animals.size()&nbsp;==&nbsp;0)&nbsp;?&nbsp;null&nbsp;:&nbsp;animals.get(0);所以整行的结果要么是 toreturn null要么return animals.get(0)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java