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

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

一、装箱转换(boxing)

  装箱时一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型类型对象并返回对象引用,简单来说就是将值类型转换为引用类型

  任何值类型ValueType都可以被隐式转换成object类型、System.ValueType或Interface(如果值类型实现了Interface)

int i = 123;object obj = i;

  装箱的过程中,首先在内存中创建 int 类型对象,然后将 i 的值复制到这个对象,最后将 int 对象的引用返回给 obj

                          

  装箱只是创建副本,在装箱产生之后,该值有原始值类型和引用类型两份副本,彼此相互独立,下面代码可以展示这一特征

using System;namespace 装箱{    class Program    {        static void Main(string[] args)        {            int i = 10;            object obj = i;            Console.WriteLine("i = {0}, obj = {1}", i, obj);            //对i和obj进行不同的赋值            i = 15;            obj = 111;            Console.WriteLine("i = {0}, obj = {1}", i, obj);            Console.ReadLine();        }    }}

结果:    

  

二、拆箱转换(unboxing)

  拆箱转换时显式转换,是将object类型或Interface类型转换为值类型的过程,拆箱时系统会检测要拆箱的实例,确保他是给定值类型的装箱值后,再把其值赋值到变量

int i = 12;//对i进行装箱object obj = i;//对obj进行拆箱int j = (int) obj;

  尝试将一个值拆箱为非原始类型时会抛出InvalidCastException异常,因此拆箱时的值类型因和装箱时的值类型一致

 

转载于:https://www.cnblogs.com/forever-Ys/p/10298080.html

你可能感兴趣的文章
一个奇葩常见的问题 nginx 403 forbidden错误
查看>>
[HDU4417]Super Mario(主席树+离散化)
查看>>
转 大话权限设计
查看>>
如何 Mock 非虚方法和密封类?
查看>>
判断应用程序是控制台程序还是窗体程序
查看>>
hdu 相遇周期
查看>>
Hive分区表增加字段新增字段值为空的bug
查看>>
rman catalog配置简要笔记
查看>>
Test SRM Level One: TemperatureScales
查看>>
ListView
查看>>
Vue自动化工具(Vue-CLI)
查看>>
十、IntelliJ IDEA 中 Project 和 Module 的概念及区别
查看>>
用户用户组管理:用户管理命令useradd
查看>>
站立会议个人博客2(2016/4/20)
查看>>
调用电话短信
查看>>
Ubunut16.04 deb包的安装与卸载
查看>>
【Oracle 存储过程和存储函数】 (1) 使用和创建存储过程,第一个存储过程
查看>>
KMP算法模板
查看>>
模版-树链剖分
查看>>
poj_1579 && hdoj_1331
查看>>