什么是 Java ?: 运算符,它的作用是什么?

新手上路,请多包涵

我已经使用 Java 几年了,但直到最近我还没有遇到过这个结构:

 int count = isHere ? getHereCount(index) : getAwayCount(index);

这可能是一个非常简单的问题,但是有人可以解释一下吗?我如何阅读它?我很确定我知道它是如何工作的。

  • 如果 isHere 为真,则调用 getHereCount()
  • 如果 isHere 为假 getAwayCount() 被调用。

正确的?这个结构叫什么?

原文由 mainstringargs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
2 个回答

是的,它是

int count;
if (isHere)
    count = getHereCount(index);
else
    count = getAwayCount(index);

它被称为 条件运算符。许多人(错误地)将其 _称为三元运算符_,因为它是 Java、C、C++ 以及可能许多其他语言中唯一的三元(三参数)运算符。但理论上 可以 有另一个三元运算符,而只能有一个 _条件运算符_。

Java Language Specification 中给出了正式名称:

§15.25 条件运算符 ? :

条件运算符 ? : 使用一个表达式的布尔值来决定应评估其他两个表达式中的哪一个。

请注意,两个分支都必须指向具有返回值的方法:

第二个或第三个操作数表达式调用 void 方法是编译时错误。

事实上,根据表达式语句的语法( 第 14.8 节),不允许条件表达式出现在任何可能出现 void 方法调用的上下文中。

所以,如果 doSomething()doSomethingElse() 是无效的方法,你不能压缩这个:

 if (someBool)
    doSomething();
else
    doSomethingElse();

进入这个:

 someBool ? doSomething() : doSomethingElse();

简单的话:

 booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse

原文由 Michael Myers 发布,翻译遵循 CC BY-SA 4.0 许可协议

其他人已经在合理的范围内回答了这个问题,但通常使用“三元运算符”的名称。

作为我这个书呆子,我想说明一下,运算符的名称是条件运算符或“条件运算符 ?:”。它是 一个 三元运算符(因为它有三个操作数)并且恰好是目前 Java 中唯一的三元运算符。

但是, 规范非常清楚,它的名称是条件运算符或“条件运算符 ?:”,绝对不含糊。我认为用那个名字来称呼它更清楚,因为它在某种程度上表明了运算符的行为(评估条件),而不仅仅是它有多少个操作数。

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题