我在 java 中尝试一元后缀和前缀运算符
这是代码
int a=10;
这行代码没有给出编译时错误
System.out.println(a+++ a +++a);
但是这条线确实
System.out.println(a++ +++a);
而这一行甚至没有
System.out.println(a+++ ++a);
我无法理解编译器如何解释这些查询的模式。
最佳答案
System.out.println(a+++ a+++a);
被解释为相同
System.out.println(a++ + a++ + a);
编译执行如下:
- 载入
a
作为第一个操作数; 第一个操作数现在是 10 - 增加
a
(第一个a++
),现在它的值是11 - 载入
a
作为第二个操作数; 第二个操作数现在是 11(因为它在上一步中递增) - 增加
a
(第二个a++
),现在它的值是12 - 将两个操作数
10 + 11
相加得到 21,它现在是a++ + a++
的结果,我们称这个中间结果为i
, 它将作为下一个总和的第一个操作数 - 载入
a
作为第二个操作数; 第二个操作数现在是 12 - 将
i
(21) 添加到a
(12) 得到33
- 载入
System.out.println(a+++++a);
被解释为相同
System.out.println(a+++++a);
- 载入
a
作为第一个操作数; 第一个操作数现在是 10 - 递增
a
后,它的值现在是11 - 预增加
a
,它的值现在是12 - 载入
a
作为第二个操作数; 第二个操作数现在是 12 - 将两者相加得到22
- 载入
有问题的
System.out.println(a+++++a);
被解释为
System.out.println((a++)++ +a);
当您对整数文字调用后增量时,这会产生相同的错误。
关于java - 前缀和后缀运算符java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24974817/