C#中"0"和"new int()"之间的区别

Job*_*ian 2 c#

可能重复:
在哪里以及为什么使用int a = new int?

下面这两个有什么区别?

int i =0; 
int i = new int();
Run Code Online (Sandbox Code Playgroud)

在内存分配方面有什么区别吗?还有其他区别吗?

Hab*_*bib 5

它们都编译成同样的东西.

假设你有:

static void Main(string[] args)
{
    int i = 0;
    int j = new int();

    Console.Write("{0}{1}", i, j);
}
Run Code Online (Sandbox Code Playgroud)

如果您在发布模式下构建并在ILSpy中查看可执行文件,则它将编译为:

private static void Main(string[] args)
{
      int i = 0;
      int j = 0;
      Console.Write("{0}{1}", i, j);
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)