使用类变量后增加运算符

时间:2012-05-08 21:30:44

标签: java increment

此代码的输出为:

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);
    }
} 

3 个答案:

答案 0 :(得分:4)

因为像c++这样的表达式是这样的:

  • 评估c;记住这一点(例如tmp = c;)
  • 增量c
  • 表达式的结果是原始值(tmp

因此,在这种情况下,您从c = 0开始,因此id变为0 ...但c在此过程中会增加,因此c为1后表达式已经过评估。

有关详细信息,请参阅Java语言规范的section 15.14.2。提取物:

  

在运行时,如果操作数表达式的评估突然完成,则后缀增量表达式突然完成,原因相同,并且不会发生增量。否则,将值1添加到变量的值中,并将总和存储回变量中。在添加之前,对值1和变量的值执行二进制数字提升(第5.6.2节)。如果必要,在存储之前,通过缩小的基元转换(第5.1.3节)和/或经过装箱转换(第5.1.7节)将总和缩小到变量的类型。后缀增量表达式的值是存储新值之前变量的值。

答案 1 :(得分:1)

id = c++c的值分配给id然后增加c。就好像你做了以下事情:

c = 0;
id = c; // assigns zero
c = c + 1;

请尝试id = ++c

答案 2 :(得分:1)

因为您使用的是c ++。

c ++意味着您首先将变量保存到您的id,然后增加++。

如果您使用++ c,则首先递增,然后将其保存为id。

但它将返回c:1 id:1,因为c ++表示c = c + 1!

如果你说:id = c + 1,你将获得c:0和id:1