浅谈值类型与引用类型的区别

1、值类型与引用类型

我们将我们之前学的数据类型划分成两拨: 

值类型
所有的数值类型(long int short byte ulong uint ushort sbyte decimal double float)、bool、char、枚举、结构

引用类型

string字符串、 数组、类

划分依据: 他们在内存中存储的结构不同

2、值类型与引用类型的异同点

a. 相同点:
无论是值类型的变量还是引用类型的变量, 变量始终是开辟在栈空间中的.
b. 不同点:
值类型的变量真实的值 直接存储在 值类型的变量之中.
引用类型的真实的值(对象) 是存储在 堆空间之中. 引用类型的变量之中存储的是 真实的值(对象)在空间中的地址.

3、值类型与引用类型的赋值效果不同

在这里强调一下: 无论是什么类型的变量之间相互赋值, 都是将源变量的值拷贝1份,将这个副本赋值给目标变量.

a. 值类型的变量在相互赋值的时候,是对1个变量的值进行修改,不会影响另外1个变量的值.

b. 引用类型的变量之间相互赋值,两个引用类型的变量实际上指向了同1个堆空间中的地址(对象),对1个变量进行修改 会影响另外的1个变量

特别注意的是:string是一种特殊的引用类型,string在内存中存储时按照引用类型的存储. 但是在赋值的时候不是这样的,是由于字串符的恒定性造成的。

4、通过代码的运用更深入地了解值类型和引用类型的区别

int temp;

temp = 100;

Console.WriteLine("修改前,temp=" + temp);

ChangeValue(temp);

Console.WriteLine("修改后,temp=" + temp);

Student stu = new Student() { Name = "张三", Age = 30 };

Console.WriteLine("修改前:" + stu.Name + "  :" + stu.Age);

ChangeValue(stu);

Console.WriteLine("修改后:" + stu.Name + "  :" + stu.Age);

Console.ReadKey();

static void ChangeValue(int num)

{

      num = 200;

}

static void ChangeValue(Student stu)

{

      stu.Age = 40;

      stu.Name = "李四";

}

结果为:

 

5、下面给一张图讲解一下上面的案例

 

相信通过这个形象的例子,大家应该明白值类型和引用类型的区别了吧!

原文地址:https://www.cnblogs.com/zybhome/p/3828893.html