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

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

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

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

  • 如果为真,则称为,isHeregetHereCount()
  • 如果是假的,则调用。isHeregetAwayCount()

正确?这个结构叫什么?


答案 1

是的,它是

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

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

官方名称在 Java 语言规范中给出:

§15.25 条件运算符 ?:

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

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

如果第二个或第三个操作数表达式是 void 方法的调用,则这是一个编译时错误。

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

因此,如果 和 是 void 方法,则无法压缩此公式:doSomething()doSomethingElse()

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

进入这个:

someBool ? doSomething() : doSomethingElse();

简单的话:

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 

答案 2

其他人在合理的程度上回答了这个问题,但通常用“三元算子”这个名字。

作为我的学究,我想明确一点,运算符的名称是条件运算符或“条件运算符?:”。它是一个三元运算符(因为它有三个操作数),它恰好是目前Java中唯一的三元运算符。

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