运算符优先级问题导致"错误:意外类型"

Ste*_* P. 8 java

由于最近有很多运算符优先级问题,我开始使用一些代码并想出了这个:

int x = someNumber;
int y = --x++;
Run Code Online (Sandbox Code Playgroud)

这给出了:

Error: unexpected type

required: variable
found: value
Run Code Online (Sandbox Code Playgroud)

我试过这个是因为我有兴趣了解java如何处理postfix运算符优先级高于的事实prefix.这似乎上面的陈述会导致矛盾,我猜这是由这个错误处理的.

我的问题是双重的:

  1. 为什么这个错误?这究竟是什么意思?
  2. 为什么postfix优先级高于prefix?我确信这是有充分理由的,但我无法想出一个.也许它会修复这种未定义的行为,但它会以某种方式引起更多问题?

Jon*_*oni 12

错误的原因是x++产生一个值,并且您不能将减量运算符应用于值,只能应用于变量.例如,如果x = 41,则x++计算结果为41,而不是变量x,并且--(41)没有意义.

至于为什么postfix的优先级高于前缀,我的猜测是在解析时避免与其他运算符的歧义.例如,编译器可以报告语法错误,x--x而不是将其解析为x-(-x).