值类型变量和引用类型变量的区别

主要区别在于 系统在内存空间中为两者分配存储空间的方式不同。

1、内存空间

内存空间分为栈空间和堆空间。值类型数据的存储空间在栈空间中分配,引用类型数据则在堆空间分配。
由系统管理栈空间的所有操作,包括进栈和出栈。当一个数据出栈后,其所分配到的存储空间由系统自动回收。
堆空间由CLR负责管理。

2、值类型变量

C#中的值类型变量和C/C++中的普通变量(非指针变量)相似。当定义一个值类型变量并初始化时,系统会在栈空间中为这个变量分配存储空间,并将值存放在存储空间中。
                                 

3、引用类型变量

引用类型变量类似C/C++中的指针变量。例如 int *p,指针变量p存储的是某个整形变量的地址。而引用类型变量存储的则是某个对象的地址,而非变量或对象本身。
事实上,当定义一个变量,不论是值类型变量还是引用类型变量,并初始化时,系统都是在栈空间中为他们分配对应的存储空间。所不同的是,引用类型变量所指向的对象的存储空间是在堆空间分配的。

猜你喜欢

转载自blog.csdn.net/hang981601026/article/details/78693610