java运算符优先级y=--x+;x++;;
根据链接,后缀增量(x++)的优先级高于前缀增量/减量(--x) 因此,java运算符优先级y=--x+;x++;;,java,operator-precedence,post-increment,Java,Operator Precedence,Post Increment,根据链接,后缀增量(x++)的优先级高于前缀增量/减量(--x) 因此,x++(值10)应在--x(值11-1=10)之前执行;因此y=20。但是“y”怎么会变成18岁呢 如第页所述 关联性和优先级决定Java将运算符应用于子表达式的顺序,但它们不决定子表达式的求值顺序。在Java中,子表达式从左到右求值(如果有选择)。因此,例如在表达式A()+B()*C(D(),E())中,子表达式的求值顺序为A(),B(),D(),E(),和C()。虽然,C()同时出现在D()和E()的左边,但我们需要D(
x++
(值10)应在--x
(值11-1=10)之前执行;因此y=20
。但是“y”怎么会变成18岁呢 如第页所述
关联性和优先级决定Java将运算符应用于子表达式的顺序,但它们不决定子表达式的求值顺序。在Java中,子表达式从左到右求值(如果有选择)。因此,例如在表达式A()+B()*C(D(),E())
中,子表达式的求值顺序为A()
,B()
,D()
,E()
,和C()
。虽然,C()
同时出现在D()和E()的左边,但我们需要D()
和E()
的结果来计算C()
。编写依赖于这种行为的代码被认为是拙劣的风格(不同的编程语言可能使用不同的规则)
这就解释了原因
x=10;
y = --x + x++;
System.out.println(y);
// prints 18
在之前执行和评估
--x
因为它是两个子表达式的和,整个表达式从左到右求值。因此,第一个表达式比x++
之前执行(是的,后修复++
通常具有更高的优先级,但这里包含它的子表达式在第一个表达式之后计算)
因此,18是正确的,因为您将9和x相加两次,如下所述
x++
正如在
关联性和优先级决定Java将运算符应用于子表达式的顺序,但它们不决定子表达式的求值顺序。在Java中,子表达式从左到右求值(如果有选择)。因此,例如在表达式A()+B()*C(D(),E())
中,子表达式的求值顺序为A()
,B()
,D()
,E()
,和C()
。虽然,C()
同时出现在D()和E()的左边,但我们需要D()
和E()
的结果来计算C()
。编写依赖于这种行为的代码被认为是拙劣的风格(不同的编程语言可能使用不同的规则)
这就解释了原因
x=10;
y = --x + x++;
System.out.println(y);
// prints 18
在之前执行和评估
--x
因为它是两个子表达式的和,整个表达式从左到右求值。因此,第一个表达式比x++
之前执行(是的,后修复++
通常具有更高的优先级,但这里包含它的子表达式在第一个表达式之后计算)
因此,18是正确的,因为您将9和x相加两次,如下所述
x++
我也不知道在那个教程中,更高优先级是什么意思;这当然与此无关。
+
的操作数从左到右求值,因此--x
在x++
之前求值@Tunaki的链接对于更多细节非常有用。我首先感兴趣的是,在++a
之前有a++
有什么意义,因为+++a++
是不正确的,因为两个++
都将返回值,但它们都期望变量,所以其中一个只会导致异常,不管它是否将被编译为(++a)++
或++(a++)
。但是如果我没有弄错的话,在a+++b
的情况下,判断它是(a+++b
,而不是a+++b
,这很方便;这当然与此无关。+
的操作数从左到右求值,因此--x
在x++
之前求值@Tunaki的链接对于更多细节非常有用。我首先感兴趣的是,在++a
之前有a++
有什么意义,因为+++a++
是不正确的,因为两个++
都将返回值,但它们都期望变量,所以其中一个只会导致异常,不管它是否将被编译为(++a)++
或++(a++)
。但是如果我没有弄错的话,在a+++b
的情况下,它会很方便地确定它是(a+++b
,而不是a+++b
@Pshemo,我更新了我的answer@maanick90,我更新了我的answer@Pshemo,我更新了我的answer@maanick90,我更新了我的答案