注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

薛沛然 廊坊师范学院 九期信息技术提高班

无脑地生活,像白痴一样成长,不给自己留感伤的时间。。。

 
 
 

日志

 
 

值变量与引用变量  

2013-02-22 21:21:57|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

c#中的变量分为两种,一种是值变量,一种是引用变量。

比如说a,b是值变量。当a=1,b=a时,如果a=2,那么仍然b=1.

比如说a,b是引用变量。当a=1,b=a时,如果a=2,那么b=2。

也就是说在不改变变量本身的情况下,值变量b始终不会发生变化,引用变量b会一直追随a的脚步。

那么这是为什么呢。下面用图来表示。

值变量

值变量与引用变量 - 薛沛然 - 薛沛然 廊坊师范学院 九期信息技术提高班

 1分配一个32位内存区给变量a,并将1放入该内存区域。将此区域命名为a

值变量与引用变量 - 薛沛然 - 薛沛然 廊坊师范学院 九期信息技术提高班

 2将1从已开辟的内存区域中取出来,传进名为b的区域。完成后,将1返回原区域。

值变量与引用变量 - 薛沛然 - 薛沛然 廊坊师范学院 九期信息技术提高班

  3再次将1传入a

这时,a已经变成了2,而b仍然是1

引用变量

值变量与引用变量 - 薛沛然 - 薛沛然 廊坊师范学院 九期信息技术提高班

 引用类型的变量不存储它们代表的实际数据,而是存储实际数据的引用。引用类型分两步创建:

首先在堆栈上创建一个引用变量,然后在堆上创建对象本身,再把内存的句柄(内存的首地址)赋给引用变量。

如图。首先在栈中。拓a,b两个内存地址。然后在堆内存中开辟专门存储数据的地址。当给a赋值时,就将a所在地址传给对内存,进行赋值。当a为b赋值时,就意味着a把自己的内存地址传给b.所以说a,b是共用一个内存地址的。自然为a赋值也就等于为b赋值。

第二个重要的概念是装箱和拆箱。

装箱:把值类型转换成为object类型,或者转换成为由值类型所实现的任何接口类型。把一个值类型的值装箱,也就是创建一个对象并把值赋给她。

例如:int a=123

          object o=a 

拆箱:拆箱操作正好相反,是从object类型转换成为值型,或者是将一个接口类型转换成为实现该接口的值类型。

拆箱的过程分为2步。1是检查对象实例是否是给定的值类型装箱值,二是从对象实例中复制出来

例如:int i=123

          object o =a

         int j=(int)o

注:只有装过箱的才能被拆箱。当一个“装箱”操作把值类型转换成一个引用类型时,不需要显式地强制类型转换,而拆箱操作把引用类型转换成值类型时,由于它可以强制转换到任何可以相容的值类型,所以必须显式地强制类型转换。

最后做一个总结。

值变量与引用变量 - 薛沛然 - 薛沛然 廊坊师范学院 九期信息技术提高班
  评论这张
 
阅读(351)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017