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)
我无法理解编译器如何解释这些查询的模式.
如果是
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)
似乎消除了使编译器感到困惑的歧义,并按照您的预期进行编译。
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |