装箱和拆箱

装箱

装箱是将值类型转换为 object 类型或由值类型转换为该类型所继承的接口类型。

装箱的过程:值类型会在堆上分配一个对象实例并将值复制到新对象。 比如:

int i=123;
object o=i;

object o=i; 这行代码会在堆栈上创建一个引用对象 o ,在堆上的值是 int i 的副本。所以在装箱后把变量 i 改为 789,不会影响 o 中存储的值。

拆箱

拆箱是从对象中提取值类型或从接口类型到实现操作类型的显式转换。

拆箱的过程:

  • 检查给定的值类型是否符合对象类型

  • 将实例中的值复制到值类型变量

object o=123;

short i=(short)o;//会抛出 InvalidCastException 异常,不能将 32 位的 int 转换为 16 位的 int

int i=(int)i;//拆箱成功

装箱拆箱过程有点类似深拷贝,但装箱拆箱的过程是非常消耗性能,而且我们在开发中就有一些非常不在意代码,切做着装箱拆箱,例如:

string.Concat("hello ",123,true);

ArrayList array =new ArrayList();//或使用 List<object>
array.Add(123);
array.Add("hello");

int i=(int)array[0];//拆箱

在开发中最好避免不必要的装箱拆箱。此外,发挥泛型的作用。

最后,祝大家学习愉快!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值