它们都对i进行了实例化,
int i=new int()与int i=null相当吧

解决方案 »

  1.   

    int i=0在栈上分配一个地址并且付值1;int i= new int()在栈上分配一个地址等待付值。在C#中,值类型(Value-type)的对象例如结构(struct)是在栈上创建的;而引用类型(reference-type)的对象例如类(class)是在堆上创建的。 
      

  2.   

    所有值类型隐含的default constructor构造函数,返回一个
    初始化为零值的实例作为该类型的缺省值。
    所以int i=new int()相当于int i=0
      

  3.   

    关于存储的问题,我copy 了PROFESSIONAL C#的一段话:(不过实际上的
    没有必要深究的):
    在c#程序中,数据类型存储在两个位置:第一个地方称为堆栈。它用于
    存储固定长度的数据,每个程序执行时都有自己的堆栈,其他程序不能
    访问该堆栈。第二个地方称为堆。不同与c,c++, c#中数据不存储于堆中,
    (注:在c,c++中,堆部分可用于存储可变长度的数据),而是存储在受管制
    的堆中,受管制的堆的用途非常类似于堆,但以更高效的方式在内部执行。具体这个受管制的堆的内部结构和存储方式,我也搞不太清楚,大概也是
    一个存储段吧。没必要深究了。
      

  4.   

    这是C#一处容易混淆的地方,其实int i=0;与int i= new int();完全一样,对象究竟是在Stack还是在Heap是由类型定义(struct VS classw)决定的,与是否使用new没有关系。对struct使用new,C#编译器仍然会将它放在堆栈里。
      

  5.   

    stack上的对象不受GC的管理,函数返回的时候其空间自动释放。
    heap里的对象则是由GC控制其内存回收的。