The conditional operator ? :
uses the boolean value of one expression to decide
which of two other expressions should be evaluated.
The conditional operator is syntactically right-associative (it groups right-to-left), so that a?b:c?d:e?f:g
means the same as a?b:(c?d:(e?f:g))
.
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression?
Expression:
ConditionalExpression
The conditional operator has three operand expressions; ?
appears between the first and second expressions, and :
appears between the second and third expressions.
The first expression must be of type boolean
, or a compile-time error occurs.
The conditional operator may be used to choose between second and third operands of numeric type, or second and third operands of type boolean
, or second and third operands that are each of either reference type or the null type. All other cases result in a compile-time error.
Note that it is not permitted for either the second or the third operand expression to be an invocation of a void
method. In fact, it is not permitted for a conditional expression to appear in any context where an invocation of a void
method could appear (§14.7).
The type of a conditional expression is determined as follows:
byte
and the other is of type short
, then the type of the conditional expression is short
.
byte
, short
, or char
, and the other operand is a constant expression of type int
whose value is representable in type T, then the type of the conditional expression is T.
At run time, the first operand expression of the conditional expression is evaluated first; its boolean
value is then used to choose either the second or the third operand expression:
true
, then the second operand expression is chosen.
false
, then the third operand expression is chosen.
The chosen operand expression is then evaluated and the resulting value is converted to the type of the conditional expression as determined by the rules stated above. The operand expression not chosen is not evaluated for that particular evaluation of the conditional expression.