guangzhanzb 2017-04-26 14:45 采纳率: 66.7%
浏览 2013
已采纳

Java中三目运算符结合性究竟是什么?

首先,书上说的都是右结合性,甚至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。这显然是不正确的。

  • 写回答

7条回答 默认 最新

  • ljheee 2017-04-26 15:27
    关注

    三目运算符是自右向左的结合性的把

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥50 用logisim设计16位单时钟周期cpu
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据
  • ¥15 请上面代码做什么处理或什么混淆
  • ¥15 英雄联盟自定义房间置顶
  • ¥15 W5500网线插上无反应
  • ¥15 如何用字典的Key,显示在WPF的xaml中
  • ¥15 weautomate读取Excel表格信息然后填写到网页一直报错,如何解决?
  • ¥15 C#如何在Webview2中获取网页验证码
  • ¥15 esp32烧录失败,具体情况在图片上