java - 为什么 == 在 Java 中的优先级高于后缀 ++?
问题描述
拜托,有人可以帮我弄清楚为什么平等在后缀之前具有更高的优先级吗?
int x = 6;
System.out.println(7 == x++);
输出:false
根据Java中运算符优先级的一些来源:后缀应该比相等运算符具有更高的优先级。在这些来源中还提到了运算符的关联性(但是当表达式中运算符的优先级相同时应该出现)。
解决方案
如果相等的优先级高于后缀增量的优先级,7 == x++
则将被解析为 tboughwritten (7 == x)++
。这肯定不是正在发生的事情,因为++
不能应用于布尔值,这是7 == x
会产生的。它也不能应用于不是变量的表达式。因此,表达式被解析为就像是写的一样7 == (x++)
。后缀运算符具有更高的优先级。
让您感到困惑的是,比较的结果是错误的,但这是意料之中的。这也是意料之中的,因为后缀增量 ( x++
) 的值是变量在增量之前的值。x
肯定是自增的,在进行等式比较之前就自增了,但是比较的不是7和的值之间x
。它介于 7 和 的返回值之间x++
,即 6(的旧值x
)。
如果您7 == ++x
使用前缀增量运算符编写了 ,那么它将按预期工作,因为前缀增量运算符返回变量的新值。这就是为什么我们有两种不同的增量运算符:有时您想使用旧值(后缀运算符),有时您想使用新值(前缀运算符)。
推荐阅读
- python - 用 json.dump 引发 JSONDecodeError("Extra data", s, end)
- docker - 将 env var 从 docker run cmd 在 jenkinsfile 中传递给 dockerfie
- jquery - 如果找到数据则显示警报 - JQUERY
- monitoring - 在 Glowroot 中无法看到我的 Vertx 应用程序的任何 Web 事务
- python - 如何为一种热编码实现生成器功能
- reactjs - React 中的 componentWillReceiveProps 问题
- r - 在 R 中创建交互式维恩图
- python - 如何向用户询问字典中的键,如果它在字典中,则显示值
- javascript - 有没有办法根据phpgrid的多选功能在时间插入多个选择的值?
- r - 如何重命名ggplot中的图例项?