为什么以下两种情况的输出不同?这是我调试的一个更大问题的一部分,并缩小到问题
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
但如果我添加一个paranthesis,我会得到预期的输出
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 + ascii值'h'} == 105是针对'h'的ascii值进行评估的,这是104?
答案 0 :(得分:4)
实际上没有问题,运营商有不同的优先顺序。
如果您查看评论中添加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
答案 1 :(得分:2)
重点不在于您的三元运算符,而是+
在==
之前的事实:
call() + test.charAt(0)=='h'?1:0
在任何等同于
的读数中(call() + test.charAt(0)) == 'h'?1:0
此外,==
的优先级高于?
,因此等于
((call() + test.charAt(0)) == 'h') ? 1 : 0