[英]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.