【发布时间】:2014-05-30 10:13:24
【问题描述】:
这里发生了什么?这对我来说似乎很奇怪。
public int v0, v1 = v0++, v2;
【问题讨论】:
这里发生了什么?这对我来说似乎很奇怪。
public int v0, v1 = v0++, v2;
【问题讨论】:
它声明了所有三个实例成员(我知道它们是实例成员,因为您没有收到错误),就好像它们是单独声明的一样,并将其中一个显式初始化为 v0++ 的值,即是v0 在递增之前的值:
public int v0;
public int v1 = v0++;
public int v2;
你也可以这样想:
public int v0;
public int v1;
public int v2;
// (In a constructor)
v1 = v0++;
这是有效:
public int v0 = 0;
public int v1 = 0;
public int v2 = 0;
// (In a constructor)
v1 = v0++;
实例创建后,变量会有这些值:
v0: 1 因为它是递增的 v1: 0 因为它在增量之前*收到了 `v0` 的值 v2: 0 因为这是 `int` 实例成员的默认值
我说“实例成员”是因为如果这些是方法中的变量而不是类的实例成员,您会收到一个错误,抱怨您在初始化之前使用了v0。 (编辑:呃,嗯,然后是public 的东西——doh!)
【讨论】:
等于:
public int v0;
public int v1 = v0++;
public int v2;
【讨论】:
基本上,你可以这样:
public int v0;
public int v1 = v0++;
public int v2;
这是一种更有效地添加多个变量的方法。
如果你不明白v1 = v0++,这是一种说v1 = v0; v0 = v0 + 1;的方式。
所以v1 将得到v0 的值,然后v0 将得到+ 1。所以让我们说v0 = 5,然后v0++ -> v1 = 5 和v0 + 1 -> 5 + 1 -> v0 = 6;
我发现像这样设置你的变量更好:
public int v0,
v1 = v0++,
v2;
【讨论】:
v0++ 表示 v0 = v0 + 1(增量 v0)。 v1 = v0++ 表示将 v1 设置为 v0 的当前值,然后增加 v0(v0 获取新值,v1 将具有 v0 的 old 值)。 v1 = ++v0 表示增加 v0,然后将 v1 设置为 v0 的新值(两者将具有相同的值)。
++ 不only 为您提供一个递增的值以存储在另一个变量中,它还会递增源变量。 ++ 的位置(在变量名之前或之后)也决定了行为并且可以给出非常不同的结果!这也适用于--。
++v0 但v0++ 是错误的。这种情况下的正确结果是 v1 变为 5,而 v0 变为 6。
上面的代码会给出一个语法错误:v0 可能没有被初始化。 即使你尝试将 vo 和 v1 分开,代码仍然会给你语法错误。
【讨论】: