装箱:它允许根据值类型创建一个对象,然后使用对这新对象的一个引用。

int i = 5;

object o = i;

int j = (int)o;

装箱:运行时将在堆上创建一个包含值5的对象(它是一个普通对象)。o的值是对该对象的一个引用。该对象的值是原始值的一个副本,改变 i 的值不会改变箱内的值。

拆箱:第三行,必须告诉编译器将object拆箱成什么类型,同样,拆箱也会复制箱内的值,在赋值之后,j和该对象之间不再有任何关系。

拆箱和装箱的发生是时间:拆箱一般是很容易看出来,因为要在代码中明确的显示一个强制类型转换,装箱可能悄悄进行,为一个类型的值调用ToString,Equals或HashCode方法时,如果该类型没有覆盖这些方法,也会发生装箱,另外,将值作为接口表达式使用时---把它赋给一个接口类型的变量,或者把它作为接口类型的参数来传递---也会发生装箱,之所以要留意装箱和拆箱,是由于他们可能会降低性能。

引用类型的对象总是在堆上,值类型的值既可能在栈上,也可能在堆上。引用类型作为方法参数使用时,参数默认是以“值传递”方式来传递的——但值本身是一个引用。值类型的值会在需要引用类型的行为时被装箱;拆箱则是相反的过程。

转载于:https://www.cnblogs.com/mcyushao/p/9582373.html

c#的装箱和拆箱及值类型和引用类型相关推荐

  1. C#装箱和拆箱(值类型和引用类型之间的转换)

    面向对象编程中,封箱指把非对象类型的数值或数据,包装成对象类型反之,拆箱指把对象类型拆成非对象的数值或数据. 例子:定义一个Circle 类 1 class Circle 2 { 3 double r ...

  2. 堆和栈、值类型与引用类型、装箱与拆箱

    堆栈:内存条里的某一块. 电脑中有6个地方可以保存数据. <1>寄存器:保存最快.这东西在处理器内部.也就是CPU里的一小块地方给你放数据.既然是CPU,那么主要工作是计算,所以这块寄存器 ...

  3. 深入理解C#的装箱和拆箱

    装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作.  1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了 ...

  4. .NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱

    .NET六大剑客:栈.堆.值类型.引用类型.装箱和拆箱 一."堆","栈"专区 这两个字我相信大家太熟悉了,甚至于米饭是什么?不知道..."堆&quo ...

  5. C# 装箱和拆箱[整理]

    1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链 ...

  6. java基础第十一篇之Date、Math、自动装箱和拆箱

    Date类 表示一个瞬间,就是一个时刻 * * 构造方法: * public Date();//创建一个表示当前系统时间的Date对象 * public Date(long time);//毫秒值,距 ...

  7. Java™ 教程(自动装箱和拆箱)

    自动装箱和拆箱 自动装箱是Java编译器在基元类型和相应的对象包装类之间进行的自动转换,例如,将int转换为Integer,将double转换为Double,依此类推,如果转换是另一种方式,则称为拆箱 ...

  8. C# 装箱和拆箱、理论概念(非原创)

    注意:在装箱的过程中,会新生成一个堆(托管堆)对象,他值类型的值复制到引用类型(堆对象)中,此后,值类型变量的更改,不会影响引用类型.在拆箱时,会生成一个新的堆栈类型变量,将引用类型的值复制到值类型( ...

  9. java装箱和拆箱的意义_java的自动拆箱和装箱是每个程序员都要知道的

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西. 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动 ...

  10. 装箱与拆箱的概念及意义

    1.   装箱和拆箱是一个抽象的概念 2.   装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型     利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值 ...

最新文章

  1. 教你实现双十一商品标签自动归类(附数据模板)
  2. Shell命令-文件及目录操作之mkdir、mv
  3. Netbeans学习总结
  4. 前端获取浏览器标识_浏览器缓存机制
  5. Dragonfly 成为 CNCF 孵化项目,我们与基金会首位华人 TOC 聊了聊
  6. HANA全面上市,成为SAP史上用户数量增长最快的产品之一
  7. 《个人信息保护法》,教我如何做产品!
  8. Spotlight on MySQL
  9. 7-25 总结 Junit 测试 和断言 /ArrayList 和LinkedList 的区别/HashCode用来存放数据.
  10. vue+高德离线地图vue-amap开发
  11. CVPR 2019 | SPADE 阅读笔记(翻译)
  12. c语言中有符号数的补码,[分享]带符号数的表示-----补码
  13. 《都挺好》:苏明哲的老婆吴非这句话戳中所有大龄程序员的痛点!
  14. Word制作三线表格并插入公式
  15. android 加载动画素材,八种APP启动界面的Loading进度条设计动效方案
  16. 你所羡慕的生活背后,都是苦行僧般的自律
  17. Win10实现窗口AeroGlass化
  18. django channels socket通信实现
  19. AD7190之STM32程序
  20. vue图片查看插件v-viewer使用

热门文章

  1. 浅析单调递增子序列问题(LIS)
  2. hdoj2084:数塔(dp基础题----递归写法/状态转移方程法)
  3. 信用评分卡 (part 7 of 7)
  4. 如何让sublime编译c语言,如何在Sublime Text 3中编译C程序?
  5. C/C++[PAT B level 1036]图形输出
  6. RMSProp均方根反向传播法
  7. 多小区下小区上行速率的计算(5)
  8. mysql 创建xml字段_使用PHP DOM从MySQL数据创建XML文件
  9. 前端为什么有的接口明明是成功回调却执行了.catch失败回调_前端战五渣学JavaScript——Promise...
  10. python图像边缘检测报告_python计算机视觉2:图像边缘检测