C#的装箱拆箱和Nullable类型

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

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

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

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

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

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

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

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

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

  1. 1
    int ? isNullable = 100;

等价于

1
System.Nullable<int>isNullable2 = 10;

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

推荐文章