What is the Java ?: operator called and what does it do?

前端 未结 16 1721
轮回少年
轮回少年 2020-11-21 05:27

I have been working with Java a couple of years, but up until recently I haven\'t run across this construct:

int count = isHere ? getHereCount(index) : getAw         


        
16条回答
  •  孤独总比滥情好
    2020-11-21 06:21

    Yes, it is a shorthand form of

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

    It's called the conditional operator. Many people (erroneously) call it the ternary operator, because it's the only ternary (three-argument) operator in Java, C, C++, and probably many other languages. But theoretically there could be another ternary operator, whereas there can only be one conditional operator.

    The official name is given in the Java Language Specification:

    §15.25 Conditional Operator ? :

    The conditional operator ? : uses the boolean value of one expression to decide which of two other expressions should be evaluated.

    Note that both branches must lead to methods with return values:

    It is a compile-time error for either the second or the third operand expression to be an invocation of a void method.

    In fact, by the grammar of expression statements (§14.8), it is not permitted for a conditional expression to appear in any context where an invocation of a void method could appear.

    So, if doSomething() and doSomethingElse() are void methods, you cannot compress this:

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

    into this:

    someBool ? doSomething() : doSomethingElse();
    

    Simple words:

    booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 
    

提交回复
热议问题