当前位置: 首页 > news >正文

C#初级面试题5、拆箱和装箱

在 C# 中,装箱(Boxing)拆箱(Unboxing) 是值类型和引用类型之间相互转换的过程。这是 .NET 类型系统中一个重要的概念。


📦 装箱(Boxing)

装箱 是指将 值类型(比如 intboolstruct 等)转换为 引用类型(通常是 object 或实现了的接口类型)的过程。

  • 装箱是隐式的(自动发生的)。
  • 会把值类型的值 复制 到堆上,并返回一个指向该堆对象的引用。
示例:
int i = 123;
object obj = i;  // 装箱:int → object

此时,i 的值被复制到堆上,obj 指向这个新创建的对象。


📤 拆箱(Unboxing)

拆箱 是指将 引用类型(之前由值类型装箱而来)显式转换回原来的值类型

  • 拆箱是显式的(需要强制类型转换)。
  • 如果类型不匹配,会抛出 InvalidCastException 异常。
示例:
object obj = 123;     // 装箱
int j = (int)obj;     // 拆箱:object → int

⚠️ 注意事项

  1. 性能开销:装箱/拆箱涉及内存分配(堆)和复制操作,频繁使用会影响性能。
  2. 类型必须匹配:拆箱时目标类型必须和原始值类型完全一致。
    object obj = 123;
    long l = (long)obj; // ❌ 错误!会抛出 InvalidCastException
    
    正确做法是先拆箱成 int,再转换:
    long l = (long)(int)obj; // ✅ 先拆箱,再数值转换
    

💡 小结

操作含义是否隐式示例
装箱值类型 → 引用类型(如 objectobject o = 42;
拆箱引用类型 → 原始值类型否(需强转)int x = (int)o;

在泛型(如 List<int>)普及后,装箱/拆箱的使用大大减少,因为泛型避免了不必要的类型转换。

提问

使用装箱和拆箱的代价是什么?

主要是性能,在装箱是必须创建一个新对象,这涉及为其分配内存。

拆箱涉及类型转换。

将字符串赋值给object类型的变量是装箱吗?

不是,因为string不是值类型。

http://www.dtcms.com/a/596434.html

相关文章:

  • 如何判断企业是否需要 IAM ?数字化转型中的权限治理自测
  • CSP-J教程——第一阶段——第六课:程序流程控制 - 循环结构(一)for循环
  • 【C++基础与提高】第二章:C++数据类型系统——构建程序的基础砖石
  • 【每天一个知识点】CAG:Context-Augmented Generation
  • 《Linux系统编程之系统导论》【冯诺依曼体系结构 + 操作系统基本概述】
  • 第23天python内容
  • 5.2、Python-字符串的编码和解码
  • 美容院网站源码网站流量下降的原因
  • FreeRTOS 学习:(十七)“外部中断”和“内核中断”的差异,引入 FreeRTOS 中断管理
  • CodeBuddy AI IDE :Skills 模式
  • 大模型学习计划(按周规划)
  • 绥中网站建设分类信息网网站500
  • k8s 部署MySQL 数据持久化
  • Quantinuum 发布新型量子计算机“Helios“
  • ubuntu/kali安装k8s
  • 开源 Objective-C IOS 应用开发(二)Xcode安装
  • 【论文阅读】Gradient Guidance for Diffusion Models:An Optimization Perspective
  • WebSocket调试工具(html),用于调试WebSocket链接是否畅通
  • Springboot3.X+security6.5+jdk21
  • 中文企业网站设计欣赏宁波网站建设方案联系方式
  • Vue2 入门到实战(day2):计算属性、监视属性、样式绑定与条件渲染(附代码案例)
  • C语言位运算深度应用:嵌入式硬件寄存器控制与低功耗优化实践
  • 深圳建立网站营销用动易建设网站教程
  • 京东后端架构技术,Pipline 设计 解决复杂查询逻辑
  • 《STM32 江湖 SPI 双绝:硬件外设与软件模拟的深度解析》
  • Docker学习笔记---day002
  • F280049C学习笔记之X-BAR
  • Python基础教学:Python的openpyxl和python-docx模块结合Excel和Word模板进行数据写入-由Deepseek产生
  • WebSocket原理及实现详解
  • 网站建设与管理吴振峰pptapp的制作需要多少钱