条件运算符 ?: 是有点晦涩的三元运算符(有三个操作数),从 C 语言继承而来,可以在一个表达式中嵌入条件判断。这个运算符可以看成是 if/else 语句的运算符版。条件运算符的第一个和第二个操作数使用问号(?)分开,第二个和第三个操作数使用冒号(:)分开。第一个操作数的计算结果必须是布尔值。第二个和第三个操作数可以是任意类型,但要能转换成同一类型。
条件运算符先计算第一个操作数,如果结果为 true,就计算第二个操作数,并把结果当成表达式的返回值;如果第一个操作数的计算结果为 false,条件运算符会计算并返回第三个操作数。条件运算符绝不会同时计算第二个和第三个操作数,所以使用有副作用的表达式时要小心。这个运算符的使用示例如下:
int max = (x > y) ? x : y;
String name = (name !=null) ? name : "unknown";
注意,?: 运算符的优先级只比赋值运算符高,比其他运算符都低,所以一般不用把操作数放在括号里。不过,很多程序员觉得,把第一个操作数放在括号里,条件表达式更易读。的确,毕竟 if 语句的条件表达式都放在括号里。