关于值类型和引用类型的区别和总结
CLR中支持两种类型:值类型和引用类型。
它们之间有什么区别?
首先我们先类了解什么叫做值类型和引用类型。
值类型(用于存储值)包括:简单类型、结构类型(struct)、枚举类型(enum)
简单类型包括:整数类型、布尔类型、字符类型、实数类型(单精度、双精度、十进制型)
结构类型用来封装小型变量组,枚举
引用类型:变量存的不是值,而是指向所要存储的值的地址。引用类型的变量又称为对象:类、口、委托、数组。
其实两者最主要的区别是两者在内存中的分配位置不同。
值类型的实例分配在线程的堆栈上,它的变量直接包含变量的实例,使用的效率比较高
而引用类型的实例重视从托管堆上分配内存的,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。
由于两种在内存中分配位置的不同。引用类型的实例是分配在托管堆上,它的生命周期受到垃圾回收器的管理。而值类型直接分配在堆栈上,他的生命周期随堆栈的弹出而结束
值类型变量包含了其实例数据,每个变量保存了其本身的数据拷贝,因此在默认情况下参数的传递不会影响参数本身
引用类型保存的是其数据的引用地址,因此以引用方式进行参数的传递会影响到参数本身,因为两个变量会引用了内存中的同一个地址。
值类型有两种表示装箱与拆箱,引用类型只有一种能够形式装箱
值类型不具有多态性,而引用类型具有多态性
值类型变量进行赋值,其所有的成员的值都被复制,而引用类型变量进行赋值时只是简单复制指向一个引用对象。
唉,这些总结本应平时做的,到了快考试的时候才做,惭愧。。惭愧。。