条件运算符()
句法
{condition-to-evaluation} ? {statement-executed-on-true} : {statement-executed-on-false}
如语法所示,条件运算符(也称为三元运算符 1 )使用 ?
(问号)和:
(冒号)字符来启用两个可能结果的条件表达式。它可用于替换较长的 if-else
块,以根据条件返回两个值中的一个。
result = testCondition ? value1 : value2
相当于
if (testCondition) {
result = value1;
} else {
result = value2;
}
它可以读作 “如果 testCondition 为 true,则将结果设置为 value1; 否则,将结果设置为 value2“。
例如:
// get absolute value using conditional operator
a = -10;
int absValue = a < 0 ? -a : a;
System.out.println("abs = " + absValue); // prints "abs = 10"
相当于
// get absolute value using if/else loop
a = -10;
int absValue;
if (a < 0) {
absValue = -a;
} else {
absValue = a;
}
System.out.println("abs = " + absValue); // prints "abs = 10"
常见用法
你可以使用条件运算符进行条件赋值(如 null 检查)。
String x = y != null ? y.toString() : ""; //where y is an object
这个例子相当于:
String x = "";
if (y != null) {
x = y.toString();
}
由于条件运算符具有第二低的优先级,在赋值运算符之上,很少需要在条件周围使用括号,但是当与其他运算符组合时,需要在整个条件运算符构造周围使用括号 :
// no parenthesis needed for expressions in the 3 parts
10 <= a && a < 19 ? b * 5 : b * 7
// parenthesis required
7 * (a > 0 ? 2 : 5)
条件运算符嵌套也可以在第三部分中完成,其中它更像链接或像 switch 语句。
a ? "a is true" :
b ? "a is false, b is true" :
c ? "a and b are false, c is true" :
"a, b, and c are false"
//Operator precedence can be illustrated with parenthesis:
a ? x : (b ? y : (c ? z : w))
脚注:
1 - Java 语言规范和 Java 教程都将(? :
)运算符称为条件运算符。该教程说它也称为三元运算符,因为它(目前)是 Java 定义的唯一三元运算符。 条件运算符术语与 C 和 C++以及具有等效运算符的其他语言一致。