1

这段代码的输出是:

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

3 回答 3

4

因为像这样的表达式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 节)来缩小总和。后缀增量表达式的值是存储新值之前变量的值。

于 2012-05-08T21:33:49.647 回答
1

id = c++将 的值分配cid然后递增c。就好像您执行了以下操作:

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

试试id = ++c吧。

于 2012-05-08T21:33:32.203 回答
1

因为你使用 C++。

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

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

但它会返回 c:1 id:1 因为 c++ 意味着 c = c+1!

如果你说: id = c+1 你会得到 c:0 和 id:1

于 2012-05-08T21:33:59.350 回答