title: C#的装箱拆箱和Nullable类型
    date: 2019-03-01 00:00:00
    categories:

    • 编程语言
      tags:
    • C#

    1.装箱就是把值类型转变为引用类型,拆箱就是将引用类型转变为值类型

    1. int iToBoxing = 100;
    2. object iBoxed = iToBoxing;

    装箱不需要特别的语法,其实就是一个隐式转换,因为所有的数据类型都是System.Object的子集。

    1. 装箱操作的具体过程:

    “值类型”是存储在内存的“栈”上面,而引用类型只会在“栈”上面存储一个引用,在“堆”上面存储具体的值,装箱就相当于把值类型打包放在“堆”上面,在栈上面只留一个引用,拆箱则是反过来。

    1. 拆箱:
    1. int iUnboxing = (int)iBoxed;

    相当于显示转换,同样有时候会出现数据丢失或者报错。比如:

    1. object nullObject = null;
    2. int iNull = (int)nullObject;
    3. //编译报错“空引用异常”

    装箱和拆箱操作会占用不少的内存,要尽量避免进行过多装箱拆箱操作。

      1. int ? isNullable = 100;

    等价于

    1. System.Nullable<int>isNullable2 = 10;

    相当于声明了一个整型的变量iii,如果第一个值isNullable为空的话,就赋给它500,如果isNullable不为空,就赋予它isNullable的值。