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

时间:2012-11-01 05:36:34

标签: c#

  

可能重复:
  Where and why use int a=new int?

下面这两者有什么区别?

int i =0; 
int i = new int();

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

2 个答案:

答案 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);

谢谢, 我希望你觉得这很有帮助:)