为什么Java中的postfix运算符从右到左进行评估?

时间:2014-04-28 15:49:57

标签: java operator-precedence

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

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

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

3 个答案:

答案 0 :(得分:2)

后缀运算符不是从右到左计算的; 确定值后(<粗略说 - JLS指定顺序),它们的副作用发生

答案 1 :(得分:0)

实际上:不。这是预期的行为。将a++++a进行比较。如果你做最后一个,你会得到a = 4,b = 4。

答案 2 :(得分:0)

这里似乎有某种混乱。 Java 始终从左到右进行评估(或更准确地说,总是假装这样做),如JLS here中所述:

  

Java编程语言保证了操作数   运算符似乎在特定的评估顺序中进行评估,   即,从左到右。

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

但是后缀++,与'。'在同一优先级上。运算符从左到右关联,这就是foo.bar++工作的原因。

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