前缀和后缀操作符java
我在java中尝试一元后缀和前缀运算符
这是密码
int a=10;
这行代码没有给出编译时错误
System.out.println(a+++ a +++a);
但这条线确实如此
System.out.println(a++ +++a);
而这条线甚至没有
System.out.println(a+++ ++a);
我无法理解编译器如何解释这些查询的模式
你可以在下面搜索框中键入要查询的问题!
我在java中尝试一元后缀和前缀运算符
这是密码
int a=10;
这行代码没有给出编译时错误
System.out.println(a+++ a +++a);
但这条线确实如此
System.out.println(a++ +++a);
而这条线甚至没有
System.out.println(a+++ ++a);
我无法理解编译器如何解释这些查询的模式
# 1 楼答案
System.out.println(a+++ a +++a);
被解释为
System.out.println(a++ + a++ + a);
它的编译和执行如下:
a
作为第一个操作数第一个操作数现在是10a
(第一个a++
),其值现在是11a
作为第二个操作数第二个操作数现在是11(在上一步中递增)a
(第二个a++
),其值现在是1210 + 11
相加,得到21,现在是a++ + a++
的结果,让我们调用这个中间结果i
,它将作为下一个和的第一个操作数a
作为第二个操作数第二个操作数现在是12i
(21)添加到a
(12)以获得33System.out.println(a+++ ++a);
被解释为
System.out.println(a++ + ++a);
a
作为第一个操作数第一个操作数现在是10a
,其值现在为11a
之前,它的值现在是12a
作为第二个操作数第二个操作数现在是12有问题的
System.out.println(a++ +++a);
被解释为
System.out.println((a++)++ +a);
当调用整数文本的post增量时,会出现相同的错误
# 2 楼答案
就
编译器似乎将其解释为
这不起作用,因为前/后递增/递减表达式的结果是值,而不是变量。(它也可能将其视为
a+ ++(++a)
,但结果是一样的)事实上,如果您使用Oracle编译器从命令行编译此文件,则会出现以下错误:
与Eclipse编译器的消息相比,这更能说明发生了什么:
也就是说,您可以通过尝试执行以下操作,从Eclipse中获得相同的错误:
添加一个空格:
似乎可以消除混淆编译器的歧义,并按照预期进行编译