• 装箱和拆箱


    什么是装箱和拆箱

      装箱是将值类型转换为引用类型或者是值类型(如:结构)实现任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。拆箱就是将从对象中提取值类型或者接口类型到实现该接口的值类型的显式转换。装箱时隐性的,拆箱是显式的。

    装箱

       装箱是值类型到引用类型或者这个值类型所实现的任何接口类型的隐式转换。 对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

      下面代码在做装箱操作:在堆栈上创建对象引用 obj,而在堆上则引用 int 类型的值。 该值是赋给变量 i 的值类型值的一个副本。

    1             int i = 123;
    2             //值类型变成引用类型,装箱,隐式的
    3             object obj = i;

     下图说明了两个变量 i 和 obj 之间装箱转换:

    拆箱

      下面的代码表示先进行装箱操作再接着进行拆箱操作:

    1             int i = 123;
    2             //值类型变成引用类型,装箱,隐式的
    3             object obj = i;
    4             //将从引用类型中提取值类型,拆箱,显式的
    5             int j = (int)obj;

    代码过程如图:

     拆箱的操作包括:

    • 检查对象实例,以确保它是给定值类型的装箱值。

    • 将该值从实例复制到值类型变量中。

    装箱和拆箱对程序性能的影响

      相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。 对值类型进行装箱时,必须分配并构造一个新对象。反之,拆箱所需的强制转换也需要进行大量的计算。所以在程序中应该尽量减少装箱和拆箱的操作。

    愿你我既可以朝九晚五,也可以浪迹天涯;愿你我既可以拈花把酒,也能围炉诗书茶。
  • 相关阅读:
    Traefik-v2.x快速入门
    jenkins pipeline持续集成
    phpstorm 2017激活码(方法)
    PHP保留两位小数的几种方法
    php 数组排序 按照某字段
    sql大全
    解决jpgraph在php7.0版本下时,无法显示例子图表的问题
    Linux 定时任务crontab使用
    VIM命令操作
    wampserver变橙色,apache 服务无法启动!问题解决小记(安装失败亦可参考)
  • 原文地址:https://www.cnblogs.com/xiaoheihei/p/6486974.html
Copyright © 2020-2023  润新知