zoukankan      html  css  js  c++  java
  • 装箱与拆箱

    1 int i = 2000;
    2 
    3    object o = (object)i;
    4 
    5     i= 2001;
    6 
    7    int j = (int)o;
    8 
    9    Console.WriteLine("{0},{1},{2}", i, o, j);

    结果:2001,2000,2000  解读:object o 为装箱的操作,int j为拆箱操作。

       将值类型转换为引用类型,需要进行装箱操作(boxing):

    1、首先从托管堆中为新生成的引用对象分配内存。

    2、然后将值类型的数据拷贝到刚刚分配的内存中。

    3、返回托管堆中新分配对象的地址。

    可以看出,进行一次装箱要进行分配内存和拷贝数据这两项比较影响性能的操作。

    将引用内型转换为值内型,需要进行拆箱操作(unboxing):

    1、首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。

    2、将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。

    经过这2步,可以认为是同boxing是互反操作。严格意义上的拆箱,并不影响性能,但伴随这之后的拷贝数据的操作就会同boxing操作中一样影响性能。

  • 相关阅读:
    链表实现
    @Aspect
    mybatis plus
    using
    50道题
    梦想,青春,时间
    存储过程!!!
    事务,视图,索引
    高级查询--嵌套和相关,两套分页!!!
    学习笔记
  • 原文地址:https://www.cnblogs.com/dyfisgod/p/6928919.html
Copyright © 2011-2022 走看看