值类型和引用类型有什么区别?
byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。
string,类等皆为引用类型。
值类型变量声明后,不管是否已经赋值,编译器为其分配内存。此时该值存储于栈上;int i=10;执行之前为默认一个值0。
引用类型定义时在栈上开辟一个空间用来存放其在堆上的地址,当赋值或者实例化时候就会在堆上开辟一个空间,然后把堆中的地址存放在栈中,这时候栈就存放了其地址。
内存分配如下图:
引用传递的另外一个实例
为了解决频繁的装箱和拆箱消耗资源,引入了泛型的概念,泛型是类,是引用类型,但是在自己内部做了特殊的处理,使用过程不会进行装箱拆箱操作