int a,b = 0 和 int a=0, int b = 0 之间的区别
Difference between int a,b = 0 and int a=0, int b = 0
下面两个代码块有区别吗?
int a, b, c = 0;
和
int a = 0; int b = 0; int c = 0;
是完全一样还是有什么不同?
没有。这在默认情况下是不一样的。
public void AMethod()
{
int a;
}
不会初始化您的变量,这不是 class 字段,您不能使用此变量,直到它在此方法中获得它的值。
如果您有这样的 class 定义:
class A
{
int a;
}
然后,在创建 A
对象期间,a
字段将在内部初始化为 default(int)
值,即 0
.
对于您的第一个代码块,int a, b, c = 0;
,您没有初始化原始类型。你不能使用 a 和 b,直到它被分配一些东西,如果 a = default(int)
或只是 a = 0
事件。直到第一次赋值,你会得到一个编译错误,变量必须在第一次使用前赋值。
现在,如果您比较 int a = 0, b = 0, c = 0
和 int a = 0; int b = 0; int c = 0;
,它们是相同的。这两个语句的 IL 是相同的:
IL_0001: ldc.i4.0
IL_0002: stloc.0 // a
IL_0003: ldc.i4.0
IL_0004: stloc.1 // b
IL_0005: ldc.i4.0
IL_0006: stloc.2 // c
分配给 default
值而不是 0 也没有区别(即:int a = default(int);
)。
下面两个代码块有区别吗?
int a, b, c = 0;
和
int a = 0; int b = 0; int c = 0;
是完全一样还是有什么不同?
没有。这在默认情况下是不一样的。
public void AMethod()
{
int a;
}
不会初始化您的变量,这不是 class 字段,您不能使用此变量,直到它在此方法中获得它的值。
如果您有这样的 class 定义:
class A
{
int a;
}
然后,在创建 A
对象期间,a
字段将在内部初始化为 default(int)
值,即 0
.
对于您的第一个代码块,int a, b, c = 0;
,您没有初始化原始类型。你不能使用 a 和 b,直到它被分配一些东西,如果 a = default(int)
或只是 a = 0
事件。直到第一次赋值,你会得到一个编译错误,变量必须在第一次使用前赋值。
现在,如果您比较 int a = 0, b = 0, c = 0
和 int a = 0; int b = 0; int c = 0;
,它们是相同的。这两个语句的 IL 是相同的:
IL_0001: ldc.i4.0
IL_0002: stloc.0 // a
IL_0003: ldc.i4.0
IL_0004: stloc.1 // b
IL_0005: ldc.i4.0
IL_0006: stloc.2 // c
分配给 default
值而不是 0 也没有区别(即:int a = default(int);
)。