首先,我最近遇到了这个问题,并且无法找到一个好的解释:
int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2;
我之前使用过三元表达式,所以我熟悉它们,说实话我甚至不知道该怎么称呼这个表达式...我认为它会像这样分解
if (con1) or (con2) return 1 // if one is correct
if (!con1) and (!con2) return 0 // if none are correct
if (con1) not (con2) return 2 // if one but not the other
就像我说的那样,我真的不知道,所以我可以在一百万英里之外。
答案 0 :(得分:4)
它是int x = (30 > 15)?((14 > 4) ? 1 : 0): 2;
:
if (30 > 15) {
if (14 > 4)
x = 1;
else
x = 0;
} else {
x = 2;
}
答案 1 :(得分:4)
由于operator precedence in Java,此代码为:
int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2;
将被解析,就像它被括号括起来一样:
int x = (30 > 15) ? ((14 > 4) ? 1 : 0) : 2;
(优先级低于三元?:
的唯一运算符是各种赋值运算符:=
,+=
等。)您的代码可以口头表达为:
编辑:嵌套的三元运算符通常以特殊的方式格式化,以使整个事物更容易阅读,特别是当它们超过两个深度时:
int x = condition_1 ? value_1 :
condition_2 ? value_2 :
.
.
.
condition_n ? value_n :
defaultValue; // for when all conditions are false
如果你想为其中一个“?
”部分使用三元表达式,那么这种方法并不干净。反转条件意义以保持嵌套在“:
”部分是很常见的,但有时你需要在两个分支中嵌套。因此,您的示例声明可以重写为:
int x = (30 <= 15) ? 2 :
(14 > 4) ? 1 :
0 ;