首先,书上说是自右向左,甚至JLS中也明确说明“The conditional operator is syntactically right-associative (it groups right-to-left). Thus, a?b:c?d:e?f:g
means the same as a?b:(c?d:(e?f:g))
.”
但是,如果是右结合性,有什么办法证明吗?我自己试着写了个证明的例子,但是结果却像是在告诉我——三目运算符的结合性是自左向右的。
如果是自右向左的结合性,那么(++y) == 2 ? 0 : -1
应该先被执行,也就是说y的值应该是2。但结果确是1……
我理解的结合性就是指在优先级相同的情况下,看是从左向右还是右向左。
自问自答吧。
stackoverflow上找到一种解释,我觉得还蛮不错。
就用a?b:c?d:e来说。
如果是左结合性,那么表达式等值于下((a?b:c)?d:e)。
于是乎变成了用(a?b:c)的结果,去决定究竟是返回d或者e。也就是说这个表达式只可能返回d或者e。这显然是不正确的。
慕的地6079101
一只萌萌小番薯
九州编程
ibeautiful
汪汪一只猫