繁体   English   中英

使用三元运算符时的括号

[英]Parentheses while using ternary operator

为什么以下两种情况的输出不同? 这是我已经调试并缩小到问题的更大问题的一部分

public static void main(String[] args) {    

        String test = "hello";
        System.out.println(call() + test.charAt(0)=='h'?1:0);
    }

static int call()
    {
        return 1;
    }

输出:0

但是如果我添加一个括号,我会得到预期的输出

public static void main(String[] args) {    

        String test = "hello";
        System.out.println(call() + (test.charAt(0)=='h'?1:0));
    }

static int call()
    {
        return 1;
    }

输出:2(如预期)

在最初的调用中, call() + test.charAt(0) 是否针对“h”进行评估,并相应地分配了 1 和 0? 这意味着 {1 + 'h' 的 ascii 值} == 105 是针对 'h' 的 ascii 值(即 104)进行评估的?

其实没有问题,运算符有不同的优先顺序。

如果您查看Andy Turner在他的评论中添加的链接,您会发现此表

在此处输入图像描述

如您所见, additive+- )比三元运算符具有更高的优先级。 这就是为什么:

call() + test.charAt(0)=='h'?1:0
^^^^^^^^^^^^^^^^^^^^^^^
  High precedence      
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       Less precedence

因此,您可以使用括号更改优先顺序:

call() + (test.charAt(0)=='h'?1:0)
          ^^^^^^^^^^^^^^^^^^^^^^^
              High precedence      
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       Less precedence

关键不是您的三元运算符,而是+<\/code>位于==<\/code>之前的事实:

call() + test.charAt(0)=='h'?1:0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM