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

本文详细解析了值类型与引用类型的概念、区别及应用场景,包括它们在内存中的存储方式、赋值效果的不同,并通过代码示例进行了深入浅出的说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值