Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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_Operators_Operator Precedence - Fatal编程技术网

Java运算符优先级复合体(后缀、一元、关系、逻辑和、赋值)

Java运算符优先级复合体(后缀、一元、关系、逻辑和、赋值),java,operators,operator-precedence,Java,Operators,Operator Precedence,以下代码符合输出b1=false int x=1; boolean b1 = ++x >= 1 && x++ == 1; System.out.println("b1="+b1); 但根据标准,它必须输出b1=true 谁能一步一步地给我解释一下发生了什么事吗? 用于此问题的运算符的顺序根据 1> 后缀-x++ 2> 一元-++x 3> 关系-= 4> 相等-== 5> 逻辑与-& 我使用的方法, 1> ++x>=1&&x++==1 2> ++x>=1&&1==1现在x=

以下代码符合输出
b1=false

int x=1;
boolean b1 = ++x >= 1 && x++ == 1;
System.out.println("b1="+b1);
但根据标准,它必须输出
b1=true

谁能一步一步地给我解释一下发生了什么事吗?

用于此问题的运算符的顺序根据

1> 后缀-
x++

2> 一元-
++x

3> 关系-
=

4> 相等-
==

5> 逻辑与-
&

我使用的方法,

1>
++x>=1&&x++==1

2>
++x>=1&&1==1
现在
x=2

3>
3>=1&&1==1
现在
x=3

4>
true&&1==1

5>
true&&true

6>
true

因此,它应该输出
b1=true

我哪里出错了?


我所要求的是简单的,我们考虑运算符优先级<强>超过< /强>表达式的评估顺序,<代码> int x=1+2×3;<代码>但是为什么对

++x>=1和&x++==1使用求值顺序而不是运算符优先级您不应该混淆运算符优先级和求值顺序。表达式从左到右求值,与运算符优先级无关

步骤1:通过分组子表达式,将运算符优先级应用于表达式:

boolean b1 = ++x >= 1 && x++ == 1;
//becomes
boolean b1 = ( ((++x) >= 1) && ((x++) == 1) );
步骤2:然后从左到右对子表达式求值,而不考虑运算符优先级:
++x
因此在
x++
之前求值

但是请注意,
x++
仅在条件的左半部分为true时计算,否则
&&
返回false而不计算第二个条件

换句话说,您的代码相当于:

int x = 1;
int temp1 = ++x; //temp1 = 2
boolean b1 = false;
if (temp1 >= 1) {
  int temp2 = x++; //temp2 = 2
  if (temp2 == 1) {
    b1 = true;
  }
}

参考:您可以在中阅读有关表达式计算的更多信息。

运算符优先级和计算顺序是两件不同的事情。首先计算
&&
的左侧。(通常情况下,首先计算事物的左侧。)该代码不是等价的-即用于
&
,而不是
&
。编辑;请随意回滚。非常好的一点,谢谢。好的,谢谢,但你能告诉我另一个例子,表达式从左到右求值,然后应用运算符优先级吗?(不使用逻辑运算符)说:
x=1;y=x+++++x-在这种情况下,y将是1+3=4。无论如何,x++(后缀)的优先级高于+++x(一元运算符或前缀)