博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#装箱和拆箱
阅读量:6613 次
发布时间:2019-06-24

本文共 722 字,大约阅读时间需要 2 分钟。

C#装箱和拆箱详解

                       .net装箱和拆箱是.net framework框架模型了值类型和引用类型之间的转换发的过程,  值类型和引用类型之间可以转换的原因是值类型继承于System.ValueType,但 System.ValueType类型又继承于System.Object。Object类型是万物之源。

装箱是值类型到引用类型的转换,拆箱是引用类型到值类型之间的转换

装箱的原理:

int a =9;Object b = a; 1.当发生装箱的时候,在托管堆里分配内存,内存大小为值类型的内存大小和额外的内存,会把值类型的值复制一份,拷贝到该堆内存里即可。 2.然后返回该堆内存里的地址,将该地址返回给Object对象b。 3.装箱效率低,原因为需要在堆内分配内存,同时还要拷贝值都要占用效率,性能低下。同时a的值和对象b之间并无任何关系。

拆箱原理

int c = (int)b; 1.当发生拆箱的时候,会检测b是否为NULL,当为NULL时候会抛出异常,同时检测b对象里的值类型是否和转换的类型是否一致,若不一致,也会报错 2.若检测无误后,会在栈内存里分配内存,同时引用对象里的值复制一份到栈内存里, 3.拆箱性能损耗较少,和装箱性能损耗相比,较轻。同时c和对象b之间并无任何关系

 

拆箱和装箱的使用         拆箱和装箱之间对性能损耗很大,尽量减少拆箱和装箱的操作         1,尽量减少引用类型和值类型之间的运算。例如字符串和值类型之间的加法,会发生装箱问题         2,尽量使用泛型集合和对象,避免发生装箱和拆箱的动作

 

转载于:https://www.cnblogs.com/LGDD/p/9531960.html

你可能感兴趣的文章
Vue.js中MVVM的原理和实现
查看>>
ESP-8266 MQTT例程----四博智联
查看>>
让机器人洗衣服,没有想象中那么简单
查看>>
微信模块 Oejia_wx v0.5.8 发布,审批流支持及素材图文增强
查看>>
go-fastdfs v1.2.2 发布,高性能、高可靠分布式文件系统
查看>>
2018上海云栖大会workshop-日志数据采集与分析对接
查看>>
数据结构思维 前言
查看>>
政府在区块链时代的角色转变
查看>>
leetcode算法题解(Java版)-8-动态规划+状态压缩
查看>>
Mac 10.12安装FTP工具FileZilla
查看>>
XCopy提示“访问遭到拒绝”问题解决
查看>>
Web Hacking 101 中文版 七、CRLF 注入
查看>>
在Spring MVC Controller中注入HttpServletRequest对象会不会造成线程安全的问题
查看>>
达沃斯直击:区块链与加密货币的命运冰火两重天 | AI金融评论
查看>>
Rockchip RK3399将ai目标检测从嵌入式端带入实用
查看>>
CentOS 7挂载磁盘提示: mount: unknown filesystem type 'LVM2_member'
查看>>
[转载] 磁盘硬件问题(坏块)检测
查看>>
笨办法学 Python · 续 练习 4:处理命令行参数
查看>>
python之函数式编程与函数闭包
查看>>
Android优化——UI优化(三)使用ViewStub延迟加载
查看>>