c# 值类型与引用类型的区别
参考资料:《C#程序设计》
1、首先我们先了解一下c#的基本数据类型包含哪些。
c#的数据类型可分为两种,分别是值类型和引用类型。关系如下图:
2、什么是值类型呢?
值类型直接存储数据值,它主要包括简单类型和复合类型两种,其中,简单类型是程序中使用的最基本类型,主要包括整数类型、浮点类型、布尔类型和字符类型等4种。值类型在栈中进行分配,因此效率很高,使用值类型主要目的是为了提高性能。值类型具有如下特性。
》值类型变量都存储在栈中。
》访问值类型变量时,一般都是直接访问其实例。
》每个值类型变量都有自己的数据副本,因此对一个值类型变量的操作不会影响其他变量。
》值类型变量不能为null,必须具有一个确定的值。
3、什么又是引用类型呢?
引用类型是构建C#应用程序的主要对象类型数据,引用类型的变量又称为对象,可存储对实际数据的引用。C#支持两个预定义的引用类型object和string。
在应用程序执行的过程中,引用类型使用new关键字创建对象实例,并存储在堆中。堆是一种由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。
引用类型具有如下特征。
必须在托管堆中为引用类型变量分配内存。
在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化。
引用类型变量是由垃圾回收机制来管理的。
多个引用类型变量可以引用同一对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象。
引用类型被赋值前的值都是null。
所有被称为“类”的都是引用类型,主要包括类、接口、数组和委托等。例如:
Student student1=new Student();
Student student1=student1;
4、他们的区别是什么?
先上图,如下