西海桃子 2018-10-29 06:35 采纳率: 60%
浏览 730
已采纳

Java中如何理解条件运算符的结合性与运算顺序的区别?

 public class Test {
    public static void main(String[] args) {
        // (true ? true : false) ? false : false
        boolean left = (a() ? b() : c()) ? d() : e();
        System.out.print(left + "\n");

        // true ? true : (false ? false : false)
        boolean right = a() ? b() : (c() ? d() : e());
        System.out.print(right + "\n");

        // true ? true : false ? false : false
        boolean result = a() ? b() : c() ? d() : e();
        System.out.print(result + "\n");
    }

    public static boolean a() {
        System.out.print("a\t");
        return true;
    }
    public static boolean b() {
        System.out.print("b\t");
        return true;
    }
    public static boolean c() {
        System.out.print("c\t");
        return false;
    }
    public static boolean d() {
        System.out.print("d\t");
        return false;
    }
    public static boolean e() {
        System.out.print("e\t");
        return false;
    }
}

运行得到的结果:
a b d false
a b true
a b true


表达式1:(true ? true : false) ? false : false
表达式2:true ? true : (false ? false : false)
表达式3:true ? true : false ? false : false


由运行的结果分析:
表达式3与表达式2的结合性相同;
但是运行得到的结果: a b true ,表明条件运算符的运算顺序是按照从左至右的顺序。


通过以上分析,我认为:
条件运算符(?:)的结合性是从右至左,而运算顺序是从左至右。


我的理解正确吗?求大神解惑。

  • 写回答

1条回答 默认 最新

  • ghq-yes 2018-10-29 08:50
    关注

    你这样说我觉得是没有问题的,但我不是这样去想的,我的想法是,运算都是从左到右,在这个基础上,我再考虑运算的优先级,括号的优先级最高,所以先算括号的的,条件运算符第二

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵