2

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

下面这两个有什么区别?

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

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

4

2 回答 2

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
于 2012-11-01T05:45:21.563 回答
0

第一个

int i = 0;

初始化一个新的整数 name i。然后,将其值设置为0

而第二个

int i = new int();

将 name 的新整数初始化为i默认值(即0)。这也类似于

int i = default(int);

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

于 2012-11-01T05:42:06.993 回答