首页 > 学院 > 开发设计 > 正文

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

2019-11-17 03:03:38
字体:
来源:转载
供稿:网友

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

1、值类型与引用类型

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

值类型所有的数值类型(longint 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 = newStudent() { Name = "张三", Age =30 };

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

ChangeValue(stu);

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

Console.ReadKey();

static voidChangeValue(int num)

{

num = 200;

}

static voidChangeValue(Student stu)

{

stu.Age = 40;

stu.Name= "李四";

}

结果为:

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表