2.4.3 值类型与引用类型间转换也称为装箱拆箱操作,将基本类型或值类型转换成引用类型称为装箱,将引用类型转换为基本类型或值类型称为拆箱。 1.装箱 【例2-21】装箱,把值类型转换为引用类型。 int i=10; object obj=i; i=20; 说明:这里包含了装箱的操作。这段代码将一个值类型变成了引用类型。具体代码的含义如下: 1) 2) 3) 实现的实质是:引用类型obj被赋值时,是将整型变量i值10复制存储到内存的一个区域(堆中),obj中存放此内存空间的指针(栈中)。所以i发生变化并不影响obj的值。 2.拆箱 【例2-22】拆箱,把引用类型转换为值类型。 object obj=10; int i=(int)obj; i=20; 说明:这里包含了拆箱的操作。这段代码将一个引用类型变成了值类型。具体代码的含义如下: 1) 2) 3) 装箱拆箱操作实质上是增加指针与去掉指针的操作,是一个挺浪费资源的过程,还可能引发错误。如果被拆箱的引用类型值为空null,或与对应基本类型或值类型冲突,就会引发抛出Sysytem.InvalidCastException异常。 【例2-23】拆箱异常。 object obj=10; //float f=( float)obj; 说明:拆箱时类型指定与值不相符。因为obj值是个整型,要拆箱为浮点类型,就会发生异常。 值类型与引用类型间之所以能相互转换,是它们的根都是object类,都隐式继承于object类。没有这个前提,它们之间就无法实现相互转换。 归根结底,这些转换还是继承关系间对象的转换,不存在继承关系,转换就不可能实现。 |
|
来自: 昵称11430195 > 《.net》