有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么Java中的后缀操作符要从右向左求值?

假设我们有以下Java代码片段:

int a = 3;
int b = a++;

a的值首先分配给b,然后递增b = 3a = 4。那么为什么后缀表达式要从右向左求值呢?从左到右进行评估不是更有意义吗


共 (2) 个答案

  1. # 1 楼答案

    这里似乎有些混乱。Java总是从左到右求值(或者更准确地说,总是假装这样做),如JLS here中所述:

    The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

    你所说的是关联性的方向,也就是说,如果一个操作数夹在两个优先级相同的操作之间,那么哪个操作数是绑定的。例如,三元运算符是右关联的,因为如果你有a?b?c:d:e,你希望它解析为a?(b?c:d):e

    但是后缀++,与“.”处于相同的优先级运算符是从左到右关联的,这就是foo.bar++工作的原因

    前缀++确实是正确的分组,因为++++x实际上应该是`++(++x)。由于它是一元运算符,且操作数位于右侧,因此必须向右分组

  2. # 2 楼答案

    后缀运算符不会从右向左求值;它们的副作用发生在值确定之后(大致说来,JLS指定了顺序)