前缀和后缀运算符java

use*_*926 5 java operators prefix-operator postfix-operator

我在java中尝试一元postfix和前缀运算符

这是代码

int a=10;
Run Code Online (Sandbox Code Playgroud)

这行代码不会产生编译时错误

System.out.println(a+++ a +++a);   
Run Code Online (Sandbox Code Playgroud)

但这条线确实如此

System.out.println(a++ +++a);
Run Code Online (Sandbox Code Playgroud)

而这条线甚至没有

System.out.println(a+++ ++a);
Run Code Online (Sandbox Code Playgroud)

我无法理解编译器如何解释这些查询的模式.

Jon*_*onK 1

如果是

System.out.println(a++ +++a);
Run Code Online (Sandbox Code Playgroud)

编译器似乎将此解释为

System.out.println((a++)++ +a);
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为前/后递增/递减表达式的结果是一个,而不是一个变量。(也可能被视为a+ ++(++a)但结果是相同的)。

事实上,如果您从命令行使用 Oracle 编译器对其进行编译,您会收到以下错误:

System.out.println(a++ +++a);
Run Code Online (Sandbox Code Playgroud)

与 Eclipse 编译器的消息相比,这更能说明正在发生的情况:

操作 ++/-- 的参数无效

也就是说,您可以通过尝试执行以下操作从 Eclipse 中得到相同的错误:

System.out.println(1++);
Run Code Online (Sandbox Code Playgroud)

因此添加一个空格:

System.out.println(a++ + ++a);
Run Code Online (Sandbox Code Playgroud)

似乎消除了使编译器感到困惑的歧义,并按照您的预期进行编译。