值类型和引用类型有什么区别?

byteshortintlongfloatdoubledecimalcharbool struct 统称为值类型。

string,类等皆为引用类型。

值类型变量声明后,不管是否已经赋值,编译器为其分配内存。此时该值存储于栈上;int i=10;执行之前为默认一个值0。

引用类型定义时在栈上开辟一个空间用来存放其在堆上的地址,当赋值或者实例化时候就会在堆上开辟一个空间,然后把堆中的地址存放在栈中,这时候栈就存放了其地址。

内存分配如下图:

值类型和引用类型有什么区别?_第1张图片

引用传递的另外一个实例

值类型和引用类型有什么区别?_第2张图片

值类型和引用类型有什么区别?_第3张图片

为了解决频繁的装箱和拆箱消耗资源,引入了泛型的概念,泛型是类,是引用类型,但是在自己内部做了特殊的处理,使用过程不会进行装箱拆箱操作

值类型和引用类型有什么区别?_第4张图片

你可能感兴趣的:(.net,C#)