基本概念:堆与堆栈

C#中根据存放数据的方式不同,可以将数据类型分为值类型和引用类型两大类,它们的保存位置不同。值类型变量直接把变量的值保存在堆栈中;引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。

这里涉及到两个基本概念的区分:堆和堆栈。

 

注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同。堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如int等。由数据存储的位置可知,当把一个值变量赋值给另一个值变量时,会在堆栈中保存两个完全相同的值,也就是产生“副本”。

 

而把一个引用变量赋值给另一个引用变量时,则会在堆栈中保存对同一个堆位置的引用,即在堆栈中保存的是同一个堆的地址。

 

在执行数据操作时,对于值类型,由于每个变量都有自己的值,因此对于一个变量的操作不会影响其他的变量。而对于引用类型的变量,对一个变量的数据执行操作就是操作这个变量在堆中的数据。如果两个引用类型的变量引用同一个对象,实际含义就是他们在堆栈中保存的堆的地址相同,因此对一个变量的操作,影响到引用同一个对象的另一个变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值