下面这两个有什么区别?
int i =0;
int i = new int();
内存分配有什么区别吗?还有其他区别吗?
它们都编译成相同的东西。
假设你有:
static void Main(string[] args)
{
int i = 0;
int j = new int();
Console.Write("{0}{1}", i, j);
}
如果您在发布模式下构建并在ILSpy中看到可执行文件,它会编译为:
private static void Main(string[] args)
{
int i = 0;
int j = 0;
Console.Write("{0}{1}", i, j);
}
new int()
和default(int)
这是IL
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 27 (0x1b)
.maxstack 3
.locals init ([0] int32 i,
[1] int32 j)
IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
IL_0004: ldstr "{0}{1}"
IL_0009: ldloc.0
IL_000a: box [mscorlib]System.Int32
IL_000f: ldloc.1
IL_0010: box [mscorlib]System.Int32
IL_0015: call void [mscorlib]System.Console::Write(string,
object,
object)
IL_001a: ret
} // end of method Program::Main
第一个
int i = 0;
初始化一个新的整数 name i
。然后,将其值设置为0
而第二个
int i = new int();
将 name 的新整数初始化为i
默认值(即0
)。这也类似于
int i = default(int);
谢谢,
我希望你觉得这有帮助:)