下面这两者有什么区别?
int i =0;
int i = new int();
内存分配有什么区别吗? 还有其他区别吗?
答案 0 :(得分:5)
他们两个都编译成同样的事情。
假设你有:
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
答案 1 :(得分:0)
第一个
int i = 0;
初始化名为i
的新整数。然后,将其值设置为0
而第二个
int i = new int();
将名为i
的新整数初始化为默认值(0
)。这也类似于
int i = default(int);
谢谢, 我希望你觉得这很有帮助:)