首先,書上說是自右向左,甚至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。這顯然是不正確的。
Java中,三目運算符的結合性,究竟是從左向右還是從右向左?
飲歌長嘯
2018-07-13 09:57:51