• c#基础之拆箱与装箱


    (一)装箱与拆箱

    (1)拆箱是从引用类性到值类型的转换,装箱是值类型到引用类性的转换。

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

    拆箱   是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。注意,只能拆回最开始的类型。

    int i=10;
    object obj=i;//(装箱,此时将值类型转换成引用类性,会开辟2个内存,一个存储obj的地址,一个存储其值,在这里obj的值为10.)
    int  j=(int)obj;//j=10。拆箱,从值类型转换成引用类型,在这里开辟一个内存,存储j的值
    int k=(int) obj;//k=10.拆箱。

     装箱/拆箱的内部操作。
     装箱:
     对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。按三步进行。
     第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个//SyncBlockIndex)。
     第二步:将值类型的实例字段拷贝到新分配的内存中。
     第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
     
     拆箱:
     检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。
     

    (2)避免装箱的方法:
      1、通过重载函数来避免。
      2、通过泛型来避免。 

  • 相关阅读:
    单线程的JavaScript是如何实现异步的
    前端优化之 -- 使用 require.context 让项目实现路由自动导入
    插入排序
    选择排序
    冒泡排序
    强缓存和协商缓存
    ES6 Set求两个数组的并集、交集、差集;以及对数组去重
    实现一个new操作符
    我理解的浅拷贝和深拷贝
    javascript专题系列--js乱序
  • 原文地址:https://www.cnblogs.com/anjingdian/p/10890375.html
Copyright © 2020-2023  润新知