【发布时间】:2019-03-27 23:46:24
【问题描述】:
我知道前置和后置自增运算符是如何工作的,但最近我发现了 Java 中的一个奇怪行为。到目前为止我所知道的是(正如answer 中所解释的那样):
a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)
这清楚地表明 ++a 返回递增后的值,a++ 返回递增前的值。但是最近,我遇到了这段代码:
int a = 0;
int b = a++;
int c = ++b;
System.out.println("b=" + b + "\nc=" + c);
这段代码的输出是:
b=1
c=1
这很奇怪,因为 a++ 应该返回 0,并递增 a,将 b 的值保持为 0,从上面引用的答案中可以看出,而在下一行中,b 应该先递增,然后再将值分配给 c , 使它 1. 这里发生了什么?
【问题讨论】:
-
正是您所说的:“b 应该首先递增” - 所以当您打印 b 时它是 1,然后“值被分配给 c”,即 1
-
这里发生了什么? 可恶。将递增(或递减)运算符与其他运算符混合使用会造成混淆。
-
一切都发生在第三行。一开始,如你所说,b = 0。然后 b 预递增到 1,并将 1 分配给 c。就是这样。
-
introcs.cs.princeton.edu/java/11precedence。
++尽管看起来很酷,但排名只有区区 15,而=却位居榜首!
标签: java post-increment pre-increment