Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么==的优先级高于后缀++;在爪哇?_Java_Equality_Operator Precedence_Post Increment_Associativity - Fatal编程技术网

Java 为什么==的优先级高于后缀++;在爪哇?

Java 为什么==的优先级高于后缀++;在爪哇?,java,equality,operator-precedence,post-increment,associativity,Java,Equality,Operator Precedence,Post Increment,Associativity,拜托,有人能帮我弄清楚为什么平等在后缀之前有更高的优先级吗 intx=6; System.out.println(7==x++); 输出:false 根据Java中运算符优先级的一些来源:后缀应该比相等运算符具有更高的优先级。在这些资料中,还提到了运算符的关联性(但当表达式中运算符的优先级相同时,它应该出现)。如果相等的优先级高于后缀增量的优先级,那么7==x++将通过编写(7==x)+解析为t。这当然不是正在发生的事情,因为++不能应用于布尔值,而7==x将产生布尔值。它也不能应用于非变量的

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

intx=6;
System.out.println(7==x++);
输出:
false


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

如果相等的优先级高于后缀增量的优先级,那么
7==x++
将通过编写
(7==x)+
解析为t。这当然不是正在发生的事情,因为
++
不能应用于布尔值,而
7==x
将产生布尔值。它也不能应用于非变量的表达式。因此,对表达式的解析肯定是这样的,就像编写了
7==(x++)
;后缀运算符具有更高的优先级

让你困惑的是,比较的结果是错误的,但这是意料之中的。这也是意料之中的,因为后缀增量(
x++
)的值是变量在递增之前的值
x
肯定是递增的,并且在执行相等比较之前递增,但比较不在7和
x
的值之间。它介于7和
x++
返回的值之间,即6(原来的
x


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

正如名称postincrement所示,增量发生在赋值之后。因此,
7==++x
被评估为

7 == x
x = x + 1
x = x + 1
7 == x
相比之下,使用预增量
7==++x
的计算结果为

7 == x
x = x + 1
x = x + 1
7 == x
演示:

public class Main {
    public static void main(String[] args) {
        int x = 6;
        System.out.println(7 == ++x);
    }
}
true
输出:

public class Main {
    public static void main(String[] args) {
        int x = 6;
        System.out.println(7 == ++x);
    }
}
true