1、定义

装箱:用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。 
拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。

2、为什么要装箱:

(1)调用一个类型为Object的参数的方法,Object可支持任意为型,当你需要将一个值类型(如Int32)传入时,需要装箱。 
(2)一个非泛型的容器 ,同样是为了保证通用,而将元素类型定义为Object。同样的,要将值类型数据加入容器时,需要装箱。

3、操作:

(1)装箱:

  对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。按三步进行。

  (1)新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个SyncBlockIndex)。 
  (2)将值类型的实例字段拷贝到新分配的内存中。 
  (3)返回托管堆中新分配对象的地址(对象的引用)。 
 
(2)拆箱:
  检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。

4、执行效率:

  从原理上可以看出,装箱时,生成的是全新的引用对象,这会有时间损耗,也就是造成效率降低,

所以应尽快避免装箱操作。

转载于:https://www.cnblogs.com/jolins/p/4153599.html

每日一测4(装箱与拆箱)相关推荐

  1. 关于Visual C#装箱与拆箱的研究

    关于Visual C#装箱与拆箱的研究 2004-09-15  作者: 出处: CSDN 在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题. 观者也许曾无数次的使 ...

  2. Java中的自动装箱和拆箱

    自动装箱和拆箱 自动装箱和拆箱 自动装箱: 拆箱 1. 为什么要有包装类(或封装类) 2. 基本数据类型与对应的包装类: 3. 类型间的转换 4. 何时发生自动装箱和拆箱 赋值.数值运算时 方法调用时 ...

  3. C# tips ---值类型的装箱和拆箱

    装箱过程,如: myStruct myobj= new myStruct(); object baseobj =myobj; 在上述隐式转换中,myobj的内容被复制到堆上,放在一个装箱的对象上,ba ...

  4. [Java开发之路](23)装箱与拆箱

    1. 简单介绍 大家对基本数据类型都很熟悉.比如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性,比方基本类型不能调用方法.功能简单. ..,为了让基本 ...

  5. [CLR via C#]5.3 值类型的装箱和拆箱

    原文:[CLR via C#]5.3 值类型的装箱和拆箱 在CLR中为了将一个值类型转换成一个引用类型,要使用一个名为装箱的机制. 下面总结了对值类型的一个实例进行装箱操作时内部发生的事: 1)在托管 ...

  6. C# 装箱和拆箱[整理]

    1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链 ...

  7. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]

    一.栈和托管堆 通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它们之间的根本区别在于它们在内存中的存储方式..NET使用两种不同的物理内存块来存储数据-栈和托管堆.如下图所示:     值 ...

  8. java可以用 lt =判断int吗_int 和 integer:装箱和拆箱的过程,会用到什么方法

    本文转载自[微信公众号:五角钱的程序员,ID:xianglin965],经微信公众号授权转载,如需转载与原文作者联系 原文标题<int 和 integer :装箱和拆箱的过程,会用到什么方法,你 ...

  9. 装箱与拆箱及其性能损失问题

    首先我想了解一下什么是装箱和拆箱 在类型系统中,任何值类型和引用类型都可以和object类型进行转化,装箱转化 是指将一个值类型显式或者隐式的转化为一个object类型,或者是转化成一个被该值类型应用 ...

  10. Integer装箱和拆箱 以及扔玻璃球的题目

    Integer装箱和拆箱,很奇怪的,因此Integer比较不要使用==! package interview; public class IntegerTest { public static voi ...

最新文章

  1. 老牛:虚拟化让工作如此智慧
  2. 判断当前一个物料被其他人锁定
  3. 北斗导航 | Matlab实现GNSS接收机经纬度数据(NMEA语句)实时获取和地图绘制(Matlab源代码)
  4. python flask 大文件 下载_python flask 建站之文件上传下载(一)
  5. C# 结合 Golang 开发
  6. c# 保存和打开文件的方法
  7. java 度量_Java度量方法调用率
  8. 图标X轴this显示值自定义
  9. python人脸识别要怎么实现_详解如何用OpenCV + Python 实现人脸识别
  10. projecteuler_problem12
  11. 2020年考研准考证打印下载及注意事项
  12. 密码编码学与网络安全学习笔记
  13. 接口测试工具postman
  14. [exgcd] Jzoj P5855 吃蛋糕
  15. oracle数据库的使用
  16. Android沉浸式的两种方法
  17. kafka错误代码解释
  18. jsapi 支付缺少appid ¬ify_url
  19. mysql数据库全局搜索_数据库全局搜索
  20. java.awt包_Java中awt包

热门文章

  1. WinForm控件之【LinkLabel】
  2. 日志汇总:logging、logger
  3. 基于Docker方式实现Elasticsearch集群
  4. 配置Maven环境变量-Eclipse/Idea添加Maven
  5. docker容器配置加速器
  6. Android 向右滑返回,退出当前activity
  7. SQLSERVER EXCEPT运算符=ORACLE MINUS
  8. Visual Studio 2008 安装失败(“Web 创作组件”无法安装)解决方法
  9. MS SQLSERVER中如何快速获取表的记录总数
  10. java中字节流的选择,求助,java中怎么用字节流读写汉字