为什么==比Java中的postfix++具有更高的优先级?

拜托,有人能帮我弄清楚为什么平等在这里后缀之前具有更高的优先级吗?

int x = 6;
System.out.println(7 == x++);

输出: false

根据Java中运算符优先级的一些来源:后缀应该比相等运算符具有更高的优先级。在这些来源中还提到了运算符的结合性(但当表达式中运算符的优先级相同时,它应该进来)。

回答

如果相等的优先级高于后缀增量的优先级,7 == x++则将被解析为 tbough 写入(7 == x)++。这当然不是正在发生的事情,因为++不能应用于布尔值,这就是7 == x会产生的。它也不能应用于不是变量的表达式。所以肯定是这样,表达式被解析为就像写的一样7 == (x++);后缀运算符具有更高的优先级。

让您感到困惑的是比较的结果是错误的,但这是意料之中的。这太在意了,因为后缀增量 ( x++) 的值是变量增加之前的值。x肯定是自增的,在进行相等比较之前就自增了,但是比较不是在 7 和 的值之间x。它介于 7 和 返回的值之间x++,即 6( 的旧值x)。

如果您7 == ++x使用前缀增量运算符编写了 ,那么它会按您的预期工作,因为前缀增量运算符返回变量的值。这就是为什么我们有两种不同的增量运算符:有时您想使用旧值(后缀运算符),有时您想使用新值(前缀运算符)。


以上是为什么==比Java中的postfix++具有更高的优先级?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>