由于最近有很多运算符优先级问题,我开始使用一些代码并想出了这个:
int x = someNumber; int y = --x++;
这给出了:
Error: unexpected type required: variable found: value
我试过这个是因为我有兴趣了解java如何处理postfix具有比前缀更高的运算符优先级这一事实.这似乎上面的陈述会导致矛盾,我猜这是由这个错误处理的.
我的问题是双重的:
>为什么这个错误?这究竟是什么意思?
>为什么postfix的优先级高于前缀?我确信这是有充分理由的,但我无法想出一个.也许它会修复这种未定义的行为,但它会以某种方式引起更多问题?
解决方法
@H_301_18@ 错误的原因是x产生一个值,并且您不能将减量运算符应用于值,仅应用于变量.例如,如果x = 41,则x计算为41,而不是变量x,– (41)无意义.至于为什么postfix的优先级高于前缀,我猜测它是为了避免在解析时与其他运算符产生歧义.例如,编译器可以报告x-x的语法错误,而不是将其解析为x – ( – x).