Java中,三目运算符的结合性,究竟是从左向右还是从右向左?

weixin_38060792 2017-04-26 10:43:34
首先,书上说是自右向左,甚至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)).” 但是,如果是右结合性,有什么办法证明吗?我自己试着写了个证明的例子,但是结果却像是在告诉我——三目运算符的结合性是自左向右的。 String s = "abc"; int y = 1; System.out.println("abc".equals(s) ? 1 : (++y) == 2 ? 0 : -1); System.out.println(y);//1 如果是自右向左的结合性,那么(++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。这显然是不正确的。
...全文
168 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复

477

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧