只是好奇,有什么区别:
int A = 100;
Run Code Online (Sandbox Code Playgroud)
和
int A = new int();  
Run Code Online (Sandbox Code Playgroud)
我知道new用于在堆上分配内存..但我真的没有在这里得到上下文.
Ali*_*tad 32
static void Main()
{
    int A = new int();
    int B = default(int);
    int C = 100;
    Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
被编译为
.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // Code size       15 (0xf)
  .maxstack  1
  .locals init ([0] int32 A,
           [1] int32 B,
           [2] int32 C)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.0
  IL_0004:  stloc.1
  IL_0005:  ldc.i4.s   100
  IL_0007:  stloc.2
  IL_0008:  call       int32 [mscorlib]System.Console::Read()
  IL_000d:  pop
  IL_000e:  ret
} // end of method Program::Main
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,第一个只是初始化它,第二个是相同的,第三个初始化并设置为100.至于生成的IL代码,它们都在一行中初始化.
所以
int A = new int();
Run Code Online (Sandbox Code Playgroud)
是相同的
int A = default(int);
Run Code Online (Sandbox Code Playgroud)
        Mar*_*ell 21
区别?
后者以A为0而不是100结束.
什么时候?
从来没有.也许在某些生成的代码中,使用new TypeName()语法更简单,但default(TypeName)即便如此也是首选.
而且new也没有 "堆上分配内存".它初始化一个实例; 就这些.
int A=100;
Run Code Online (Sandbox Code Playgroud)
在堆栈上分配一个int并将其值设置为100.
int A=new int();
Run Code Online (Sandbox Code Playgroud)
在堆栈上分配一个int(是的,值类型总是在堆栈上分配,即使使用new关键字)并将其值设置为默认值,即0.
强烈建议从dotnet mob阅读这篇文章: - http://codaffection.blogspot.in/2015/02/difference-between-declarations-int-i.html
int A = 100;//Initialises A to 100 Manually
Run Code Online (Sandbox Code Playgroud)
现在,如果你声明一个像这样的整数
int A;
Run Code Online (Sandbox Code Playgroud)
对于A上的进一步操作,您需要使用整数值初始化A,否则编译器显示
使用不对称的局部变量
在这种情况下,当你声明时
int A=new int();//A initialised to 0 (default value of int)
Run Code Online (Sandbox Code Playgroud)
它有助于在没有手动初始化的情况下在A上进行进一步操作,我想你现在明白我的意思了.
现在我们谈论的时候
新的()
它并不意味着分配的内存将在堆上,它取决于如果A是局部变量(如在方法中)它将在堆栈内存上或者如果A是类的成员那么它将在堆上的实例时类已创建.
要记住的要点:如果A是静态的,它将永远存在于堆栈内存中!
我是从另一个链接看到的:
MSDN 说“new 运算符还用于调用值类型的默认构造函数。”
方法内部:
int x;: 在堆栈上分配一个 int 并且不初始化它。int x=5;: 在堆栈上分配一个 int 并将其设置为 5;int x=new int();: 在堆栈上分配一个 int 并将其设置为 0;int x=new int(5);: 不编译。http://msdn.microsoft.com/en-us/library/fa0ab757.aspx
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           37152 次  |  
        
|   最近记录:  |