以下两个代码块之间有区别吗?
int a, b, c = 0;
和
int a = 0; int b = 0; int c = 0;
那是完全相同还是有区别?
答案 0 :(得分:3)
对于您的第一个代码块int a, b, c = 0;
,您没有初始化基元类型。在为a = default(int)
或a = 0
分配内容之前,您不能使用a和b。在第一次分配之前,您将收到编译错误,必须在首次使用之前分配该变量。
现在,如果您要比较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);
)也没有区别。
答案 1 :(得分:2)
没有。默认情况下这不一样。
public void AMethod()
{
int a;
}
没有初始化你的变量,这不是一个类字段,你不能使用这个变量,直到它在这个方法中得到它的值。
如果你有这样的课程定义:
class A
{
int a;
}
然后,在创建A
对象期间,a
字段将在内部使用default(int)
值进行初始化,即0
。