C#装箱和拆箱的原理
时间:2019-02-16
本文章向大家介绍C#装箱和拆箱的原理,主要包括C#装箱和拆箱的原理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
提到装箱和拆箱,都知道值类型到引用类型是装箱,引用类型到值类型是拆箱。
那么现在看下面一个demo
class Program
{
static void Main(String[] args)
{
int n=100;
string s=Convert.ToString(n);
int m=int.Parse(s);
Console.ReadKey();
}
}
上面这段程序看着是发生了装拆箱,其实并没有发生装拆箱。
int n=100;
object o=n; //发生装箱
int m=(int) o;
下面这段代码就发生了装箱和拆箱。
原理:第二段代码int n=100,相当于在内存栈中分配一个空间,把100的值存进去。object o=n,就是在栈中先分配一个变量o,然后在堆里面在开辟一个空间,把100复制一份放到这个空间里面。然后让o指向了这个对象,这就发生了一次装箱。
拆箱就是在堆里面直接找到整形100他所存在的位置,把他拷贝一份拷贝到m里面这就是拆箱。
现在咱们来看看demo1的代码和demo2的代码有啥不一样:
string类型中是不可能放int类型的,不是把n的值直接拷贝到string类型中,而是在string类型中构造一个字符串。“100”,然后让s指向他。创建了一个全新的数据类型。所以这两种类型看起来差不多,其实不一样。装箱拆箱的前提条件就是具有父子类关系。
装箱就是把值类型直接拷贝到堆里面,拆箱就是直接从堆中找到这个值。
- 海量数据迁移之通过rowid切分大表(r2笔记62天)
- 简单易学的机器学习算法——K-近邻算法
- 使用Python绘制点击图、热图
- 使用shell生成状态报表(r2笔记61天)
- 利用d3.js对QQ群资料进行大数据可视化分析
- 海量数据迁移之分区并行切分(r2笔记60天)
- 数据结构和算法——kd树
- shell脚本心得(r2笔记58天)
- C/C++——柔性数组
- 用shell脚本巧妙统计文件(r2笔记57天)
- MATLAB技巧——imshow多张图片
- MATLAB技巧——sort和sortrows函数
- Python对商品属性进行二次分类并输出多层嵌套字典
- 通过shell得到数据库中权限的脚本(r2笔记77天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法