这里发生了什么?这对我来说似乎很奇怪。
public int v0, v1 = v0++, v2;
答案 0 :(得分:4)
等于:
public int v0;
public int v1 = v0++;
public int v2;
答案 1 :(得分:4)
它声明了所有三个实例成员(我知道他们是实例成员,因为你没有得到错误),就像它们被单独声明一样,并将其中一个显式初始化为{的值{1}},这是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++;
创建实例后,变量将具有以下值:
v0: 1 Because it was incremented v1: 0 Because it received the value of `v0` *prior* to the increment v2: 0 Because that's the default value for `int` instance members
我说"实例成员"因为如果这些是方法中的变量而不是类的实例成员,那么在初始化之前,您会收到错误抱怨您使用public int v0 = 0;
public int v1 = 0;
public int v2 = 0;
// (In a constructor)
v1 = v0++;
。 (编辑:呃,嗯,然后就是那个v0
的东西 - doh!)
答案 2 :(得分:0)
基本上,你可以这样:
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
;
我觉得设置你的vars更好:
public int v0,
v1 = v0++,
v2;
答案 3 :(得分:0)
上面的代码会给出语法错误:v0可能尚未初始化。 即使你试图将vo和v1分开,代码仍然会给你语法错误。