惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
D
DataBreaches.Net
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
腾讯CDC
博客园_首页
The Cloudflare Blog
S
SegmentFault 最新的问题
C
Check Point Blog
美团技术团队
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale

博客园 - harry.guo

转:Codeigniter调用PHPExcel例子 转:iphone/ipad网站开发技巧整理 转:iPhone Android Web开发(概要) 转:jquery弹出层背景变暗 - harry.guo - 博客园 转:c#播放音频文件 - harry.guo - 博客园 转载:Android模拟器的基本操作 安装android sdk 遇到几个问题 基础:JDK的概念、组成及JDK常用包(转) 基础:JDK与JRE(转) 转:对比MFC,Winform,WPF 正则在FireFox和IE下使用test的不同 - harry.guo - 博客园 格式化日期输出 - harry.guo - 博客园 知识:软件复杂度 转:如何让你的SQL运行得更快 白盒测试步骤 Ms时间处理收集 [摘]javascript的Prototype实现和OO开发- - java实现对文件的各种操作(转) - harry.guo - 博客园 实现table跳转到指定行,并改变所在行的样式!
基础:C#装箱拆箱的计算
harry.guo · 2010-07-30 · via 博客园 - harry.guo

装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,拆箱所需的强制转换也需要进行大量的计算.

 装箱

装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

 int i = 123;

object o = i;

在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。下图说明了两个变量 io 之间的差异。

 
 

所以此时改变i的值,o的值是不会变的。因为原始值类型和装箱的对象使用不同的内存位置。

拆箱

拆箱操作包括:

  • 检查对象实例,以确保它是给定值类型的装箱值。

  • 将该值从实例复制到值类型变量中。

int i = 123;      
object o = i;     
int j = (int)o;  

要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
尝试取消装箱 null 或对不兼容值类型的引用会导致 InvalidCastException。