小弟我是个初学者,读到值类型和引用类型的时候产生了疑问,C#中规定整形,字符型等为值类型,存于栈中,而类类型为引用类型,存于堆中;而int本身就是个类(基类为object),那么int a 这个a也是类int的一个对象,所以我觉得它也应该是引用类型. 
    我问过一些人,有人说因为int类型的值存于栈中所以是值类型,那么到底是应为是存于栈中所以是值类型还是因为是值类型所以存于栈中?    还有个问题:int a = new int(),此时 a 存放在哪个区?     谢谢大家帮我这个菜鸟看看~~

解决方案 »

  1.   

    当然是值类型,但当它需要的时候(如参数类型为object),会自动转换为引用类型,这就是装箱和折箱(box和ubox)。int a = new int(),应该存于栈。
      

  2.   

    值类型,在.net里面以下代码所生成的中间代码(IL)是一样的
    int a=0;
    System.Int32 a=0;
    int a=new int();
    System.Int32 a=new System.Int32();
    因为基元数据类型的使用范围和频率都很大,所以在栈上分配空间,速度快,操作方便。
      

  3.   

    Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。