【问题标题】:How is `return <boolean exp> || <Object exp>` a valid return statement for a method that returns an Object?`return <boolean exp> 如何 || <Object exp>` 返回对象的方法的有效返回语句?
【发布时间】:2019-04-01 07:05:17
【问题描述】:

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

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

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

【问题讨论】:

  • 哇,会员 8 年了,现在你问一个问题。你真的潜伏在阴影中:-)
  • 绝对! 2026年见! ;)

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


【解决方案1】:

这与 Java 中的 operator precedence 以及哪个运算符(布尔值或三元)将首先执行有关。

三元的优先级较低,所以 or 将首先被评估,这意味着它看起来像这样带括号:

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

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

【讨论】:

  • 如有疑问:添加括号。下一个程序员会感谢你的:D
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2021-02-06
  • 2013-07-15
  • 2013-03-24
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
相关资源
最近更新 更多