【什么是装箱和拆箱】

装箱(box)是将值类型转换为引用类型的过程,拆箱(unbox)是将引用类型转换为值类型的过程

【装箱过程】

  • 先在堆上分配存储位置。(注解:引用类型的数据值放在堆中)
  • 将值类型数据的值复制到分配好的储存位置
  • 返回储存位置的地址(即引用)

(注解:装箱过程有分配内存和复制数据两个耗费性能(即影响程序整体性能)的操作)

【拆箱过程】

  • 先检查当前的引用类型数据是否可以转换为目标值类型数据(例如,string str="123"可以转换为Int ,而str="asd"不可以)
  • 复制堆中的数据的值并将复制的值放到目标数据所在的存储位置

(注解:拆箱过程有类型检查和复制数据两个操作,其中复制数据耗费性能)

【拆箱和装箱实例】

【常见的会产生装箱和拆箱的操作】

//装箱操作
int a=5;
string str="a="+5;

【如何解决拆箱和装箱引发的性能问题】

性能问题:如果装箱和拆箱进行得不是很频繁,那么性能问题不大。但有的时候,装箱很容易被忽视,而且会非常频繁地发生,这可能大幅影响性能。(对小的项目而言,我们不必要专门考虑装箱和拆箱对性能的影响,当前的计算机硬件足够强,其产生的影响可以忽略不计。平时写代码多注意下,不要忽视常见的会产生装箱和拆箱的操作的即可。)

解决方法:多使用泛型

【参考】

[1]https://blog.csdn.net/qiaoquan3/article/details/51439726

[2]《C#本质论5.0》

对C#装箱和拆箱的理解相关推荐

  1. java byte 判断相等_深入理解Java装箱与拆箱

    写给小白看的Java基础知识,阅读本文大概需要7分钟 Java中有8种基础数据类型,boolean,char,byte,short,int,long,float,double.从jdk5开始提供了自动 ...

  2. C#基础:理解装箱与拆箱

    .NET大牛之路 • 王亮@精致码农 • 2021.08.27 前面我们讲到 .NET 平台支持的两大数据类型:值类型和引用类型.值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用 ...

  3. [019] C#基础:理解装箱与拆箱

    .NET大牛之路 • 王亮@精致码农 • 2021.08.27 前面我们讲到 .NET 平台支持的两大数据类型:值类型和引用类型.值类型比引用类型更高效,因为它没有指针引用,不用分配在托管堆中,也不用 ...

  4. 深入理解C#的装箱和拆箱

    装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作.  1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用类型向值类型转换时发生 光上述两句话不难理解,但是往深处了解,就需要一些篇幅来解释了 ...

  5. java中为什么自动装箱拆箱_Java自动装箱和自动拆箱的理解

    Java自动装箱和自动拆箱的理解 1.代码 public class AutoBoxing { public static void main(String[] args) { Integer a = ...

  6. 一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  7. 理解C#中装箱和拆箱的概念

    前言 C#数据类型 什么是装箱.拆箱 产生装箱.拆箱的举例 总结 前言 C# 是一种通用.面向对象的编程语言,由微软(Microsoft)开发的,属于强类型语言,变量需先声明数据类型.然后给变量赋初值 ...

  8. java中的拆箱和装箱是指什么_一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  9. java装箱与拆箱原理_深入理解Java中的装箱和拆箱

    前言 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 若有不 ...

最新文章

  1. 【ZJOI2008】树的统计(树链剖分)
  2. CentOS 6虚拟机安装
  3. 以太坊去中心化_开发以太坊去中心化投票应用程序的指南
  4. python培训中心-【北京Python培训中心】
  5. oracle 如何添加数据文件,Oracle教程 误添加数据文件删除方法
  6. 常用的PL/SQL开发原则 by dbsanke
  7. maven私服搭建及应用
  8. c# 添加外部程序集相对引用问题
  9. 二、信号分解 —>经验模态分解(EMD)学习笔记
  10. The Best of Many Worlds_ Dual Mirror Descent for Online Allocation Problems
  11. android传感器获取运动方向,Android 重力感应获取手机运动方向和角度
  12. Transformer Transducer 论文笔记
  13. cold start
  14. 基于tensorflow和卷积神经网络的电影推荐系统的实现
  15. 如何用PS的切片工具切出想用的图片
  16. unity 显示太阳_太阳系究竟有多大?来看看天文学家是怎么解答的
  17. 浅谈 —— AAA认证(认证+授权)详解+配置
  18. 「Unity2D」使用Unity创建一个2D游戏系列-9
  19. Unpacker ExeCryptor 2.x.x. beta1,beta2 byRSI
  20. Config-Server

热门文章

  1. ChatGPT专业应用:英文语法纠错
  2. Python笔记_第一篇_面向过程_第一部分_9.Ubuntu基础操作
  3. SpringBoot项目报错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd
  4. 【APPGAMEKIT2】使用C++语言编写的UNO牌游戏
  5. QQ链接防拦截方法(非官方页面、停止访问该页面等)
  6. 计算机网络整理:UDP协议和TCP协议
  7. 同声翻译器软件的作用你知道吗
  8. 看懂这篇,至少关于Redis的面试你不用担心了
  9. linux声卡驱动比windows差,Ubuntu 8.04/8.10下SB600芯片声卡驱动问题的解决
  10. 面试必问的深浅拷贝,你真的会嘛?