Java语法:为什么这个变量声明有效?

时间:2014-05-30 10:13:25

标签: java variables syntax

这里发生了什么?这对我来说似乎很奇怪。

public int v0, v1 = v0++, v2;

4 个答案:

答案 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 = 5v0 + 1 - > 5 + 1 - > v0 = 6;

我觉得设置你的vars更好:

public int v0, 
           v1 = v0++,
           v2;

答案 3 :(得分:0)

上面的代码会给出语法错误:v0可能尚未初始化。 即使你试图将vo和v1分开,代码仍然会给你语法错误。