这段代码的输出是:
c: 1 , id: 0
我想知道为什么输出不是:
c: 0 , id: 1
class A {
private static long c;
private final long id = c++;
public A() {
print("c: " + c + " , id: " + id);
}
}
因为像这样的表达式c++
操作是这样的:
c
;记住这一点(例如tmp = c
;)c
tmp
)因此,在这种情况下,您从 开始c = 0
,因此id
变为 0... 但c
在此过程中递增,因此c
在计算表达式后为 1。
有关详细信息,请参阅Java 语言规范的第 15.14.2 节。提炼:
在运行时,如果操作数表达式的求值突然完成,则后缀增量表达式出于同样的原因突然完成并且不会发生增量。否则,将值 1 添加到变量的值,并将总和存储回变量中。在加法之前,对值 1 和变量的值执行二进制数字提升(第 5.6.2 节)。如有必要,在存储变量之前,可通过缩小原语转换(第 5.1.3 节)和/或对变量类型进行装箱转换(第 5.1.7 节)来缩小总和。后缀增量表达式的值是存储新值之前变量的值。
id = c++
将 的值分配c
给id
,然后递增c
。就好像您执行了以下操作:
c = 0;
id = c; // assigns zero
c = c + 1;
试试id = ++c
吧。
因为你使用 C++。
c++ 意味着您首先将变量保存到您的 id,然后递增 ++。
如果您使用 ++c,您将首先递增,然后将其保存到 id。
但它会返回 c:1 id:1 因为 c++ 意味着 c = c+1!
如果你说: id = c+1 你会得到 c:0 和 id:1