假设我们在Java中有以下代码片段:
int a = 3;
int b = a++;
首先将a
的值分配给b
,然后递增。 b = 3
和a = 4
。那么为什么后缀表达式从右到左进行评估?从左到右对它进行评估会更有意义吗?
答案 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)。由于它是一元运算符且操作数在右侧,因此它必须分组到右侧。