zoukankan      html  css  js  c++  java
  • C#装箱和拆箱

    C#装箱和拆箱详解

                           .net装箱和拆箱是.net framework框架模型了值类型和引用类型之间的转换发的过程,  值类型和引用类型之间可以转换的原因是值类型继承于System.ValueType,但 System.ValueType类型又继承于System.Object。Object类型是万物之源。

    装箱是值类型到引用类型的转换,拆箱是引用类型到值类型之间的转换

    装箱的原理:

    int a =9;
    Object b = a;

    1.当发生装箱的时候,在托管堆里分配内存,内存大小为值类型的内存大小和额外的内存,会把值类型的值复制一份,拷贝到该堆内存里即可。
    2.然后返回该堆内存里的地址,将该地址返回给Object对象b。
    3.装箱效率低,原因为需要在堆内分配内存,同时还要拷贝值都要占用效率,性能低下。同时a的值和对象b之间并无任何关系。

    拆箱原理

    int c = (int)b;

    1.当发生拆箱的时候,会检测b是否为NULL,当为NULL时候会抛出异常,同时检测b对象里的值类型是否和转换的类型是否一致,若不一致,也会报错
    2.若检测无误后,会在栈内存里分配内存,同时引用对象里的值复制一份到栈内存里,
    3.拆箱性能损耗较少,和装箱性能损耗相比,较轻。同时c和对象b之间并无任何关系
    拆箱和装箱的使用

    拆箱和装箱之间对性能损耗很大,尽量减少拆箱和装箱的操作
    1,尽量减少引用类型和值类型之间的运算。例如字符串和值类型之间的加法,会发生装箱问题
    2,尽量使用泛型集合和对象,避免发生装箱和拆箱的动作
  • 相关阅读:
    CF704D Captain America 上下界网络流
    CF241E Flights 差分约束
    CF1063F String Journey DP、SAM、线段树
    AGC028E High Elements 贪心、DP、线段树
    Solution -「CF 623E」Transforming Sequence
    Solution -「十二省联考2019」春节十二响
    最大团-最小度不等式
    「Lagrange 插值」学习笔记
    Solution -「NOI.AC 省选膜你赛」union
    Solution -「NOI.AC 省选膜你赛」T2
  • 原文地址:https://www.cnblogs.com/LGDD/p/9531960.html
Copyright © 2011-2022 走看看