什么是装箱和拆箱?
时间:2022-07-25
本文章向大家介绍什么是装箱和拆箱?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是装箱和拆箱?
这是一个好问题,因为它看上去高大上,甚至跨学科和领域,实际上,它只是一个非常简单的问题,但是,很多编程新手,被这个“装箱和拆箱”的名称给整蒙圈了。就直接从它面前绕过去了,以至于每每遇到就如鲠在喉,编程一个心结。这玩意,究竟是个啥呢?既然出现在编程语言里,肯定不会是一个物流名词,那它究竟是个啥操作呢?
好的,今天面对这个简单问题,咱们不绕开,仔细的把它说清楚。
C# 采用统一的类型系统,因此任意类型的值都可视为object。每种C#类型都直接或间接地派生自object类型,而object是所有类型的最终基类。
只需将值视为类型object,即可将指定类型的值视为对象。通过执行装箱和拆箱操作,就可以将值类型的值视为对象。在以下示例中,int值被转换成object,然后又恢复成int。
using System;
class BoxingExample
{
static void Main()
{
int x = 123;
object obj = x; // 装箱
int y = (int)obj; // 拆箱
}
}
那么,上面这个操作过程,我们就称之为装箱和拆箱。
装箱:当值类型的值转换成 object 类型时,将分配object实例(亦称为“箱”)来包含值,然后该值会复制到相应的箱中。
拆箱:当object引用被显式转换成值类型时,将检查引用的object是否是具有正确值类型的箱;如果检查成功,则会将箱中的值复制出来。
C#的统一类型系统实际上意味着可以”按需”将指定的类型转换成对象,然后,还能显式地将对象转换成指定的类型。
实际上,装箱和拆箱的常规用途就是实现引用类型和值类型的转换。
当然,我们需要注意的是这个操作看起来很简单,但如非必须,却是没有必要这么干的。特别是当值类型装箱操作以后,就变成引用类型,不仅增大内存占有,还会降低使用效率。虽然,这样的变化一般用户是无法察觉的,但是,追求更好的性能难道不是咱们程序员应该追求的美德吗?
- Hadoop基础教程——Hadoop单机版搭建
- 流量调整和限流技术
- 性能分析工具dotTrace
- struts2 异常处理3板斧
- UE4中的单映射:TMap容器
- Visual Studio 2015 前端开发工作流
- 易学易用的Windows PowerShell
- mongodb-java-driver基本用法
- 基于Redis的开源分布式服务Codis
- 利用Weblogic的iisproxy、iisforward插件实现IIS转发
- 帆软FineReport如何使用程序数据集
- etcd:用于服务发现的键值存储系统
- 如何使用HTTP压缩优化服务器
- "org.jboss.netty.internal.LoggerConfigurator".DESCRIBED is already registered 的解决办法
- 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 数组属性和方法
- Android 实现图片转二进制流及二进制转字符串
- Android 如何实现exclude aar包中的某个jar包
- android 实现控件左右或上下抖动教程
- Android Studio引入FFmpeg的方法
- Android Studio 中获取屏幕宽度实例
- Android studio 生成带Kotlin文档的实现方式
- 基于Android FileProvider 属性配置详解及FileProvider多节点问题
- Android 通过API获取数据库中的图片文件方式
- android尺子的自定义view——RulerView详解
- 浅谈Android Studio3.6 更新功能
- Android 自定义View手写签名并保存图片功能
- android 使用Xml文件定义Shape方式
- Android 判断所有字段是否已经输入的实例
- Android 将网络的Url资源转换为Drawable资源方式
- Android实现动态改变shape.xml中图形的颜色