Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java语法:为什么这个变量声明有效?_Java_Variables_Syntax - Fatal编程技术网

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

Java语法:为什么这个变量声明有效?,java,variables,syntax,Java,Variables,Syntax,这里发生了什么?我觉得这很奇怪 public int v0, v1 = v0++, v2; 它等于: public int v0; public int v1 = v0++; public int v2; 它等于: public int v0; public int v1 = v0++; public int v2; 它声明了所有三个实例成员我知道它们是实例成员,因为您不会得到错误,就像它们是单独声明的一样,并将其中一个显式初始化为v0++,这是v0在递增之前的值: public int

这里发生了什么?我觉得这很奇怪

public int v0, v1 = v0++, v2;
它等于:

public int v0;
public int v1 = v0++;
public int v2;
它等于:

public int v0;
public int v1 = v0++;
public int 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++;
这实际上是:

创建实例后,变量将具有以下值:

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
我之所以说实例成员,是因为如果这些是方法中的变量,而不是类的实例成员,那么您会收到一个错误,抱怨您在初始化v0之前使用了它。编辑:呃,嗯,还有一件公开的事——doh

它声明了所有三个实例成员我知道它们是实例成员,因为您不会得到错误,就像它们是单独声明的一样,并显式地将其中一个初始化为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
我之所以说实例成员,是因为如果这些是方法中的变量,而不是类的实例成员,那么您会收到一个错误,抱怨您在初始化v0之前使用了它。编辑:呃,嗯,还有一件公开的事——doh

基本上,你可以这样做:

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

我发现这样设置您的VAR更好:

public int v0, 
           v1 = v0++,
           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

我发现这样设置您的VAR更好:

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

上面的代码将给出一个语法错误:v0可能尚未初始化。
即使在您尝试分离vo和v1之后,代码仍然会给出语法错误。

上述代码将给出语法错误:v0可能尚未初始化,等等。
即使您尝试分离vo和v1,代码仍然会给出语法错误。

我明白了!我误解了,认为这组v0和v1分别等于v0的增量和一个新变量v2。没问题,请看@T.J.Crowder的答案以获得更详细的解释。我明白了!我误解并认为这组v0和v1分别等于v0增量和一个新变量v2。没问题,请看@T.J.Crowder的答案以获得更详细的解释。v0++表示v0=v0+1增量v0。v1=v0++意味着将v1设置为v0的当前值,然后增量v0得到一个新值,v1将具有v0的旧值。v1=++v0表示增量v0,然后将v1设置为新值v0,两者的值将相同。我注意到您的编辑,但您仍然弄错了它不仅给您一个递增的值以存储在另一个变量中,还递增源变量。++在变量名之前或之后的位置也决定了行为,可以给出非常不同的结果!这同样适用于-。因此,假设v0=5,那么如果它是++v0,那么v0++->v0+1->5+1->v1=6应该是正确的,但是对于v0++,它是错误的。在这种情况下,正确的结果是v1变为5,而v0变为6。v0++表示v0=v0+1增量v0。v1=v0++意味着将v1设置为v0的当前值,然后增量v0得到一个新值,v1将具有v0的旧值。v1=++v0表示增量v0,然后将v1设置为新值v0,两者的值将相同。我注意到您的编辑,但您仍然弄错了它不仅给您一个递增的值以存储在另一个变量中,还递增源变量。++在变量名之前或之后的位置也决定了行为,可以给出非常不同的结果!这同样适用于-。因此,假设v0=5,那么如果它是++v0,那么v0++->v0+1->5+1->v1=6应该是正确的,但是对于v0++,它是错误的。在这种情况下,正确的结果是v1变为5,而v0变为6。谢谢,我很感激!谢谢,我很感激!你为什么不呢?我做了,而且运行良好。没有语法错误。即使没有分开,你为什么不呢?我做了,而且运行良好。没有语法错误。即使不分开。