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

    什么是装箱和拆箱

      装箱是将值类型转换为引用类型或者是值类型(如:结构)实现任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。拆箱就是将从对象中提取值类型或者接口类型到实现该接口的值类型的显式转换。装箱时隐性的,拆箱是显式的。

    装箱

       装箱是值类型到引用类型或者这个值类型所实现的任何接口类型的隐式转换。 对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

      下面代码在做装箱操作:在堆栈上创建对象引用 obj,而在堆上则引用 int 类型的值。 该值是赋给变量 i 的值类型值的一个副本。

    1             int i = 123;
    2             //值类型变成引用类型,装箱,隐式的
    3             object obj = i;

     下图说明了两个变量 i 和 obj 之间装箱转换:

    拆箱

      下面的代码表示先进行装箱操作再接着进行拆箱操作:

    1             int i = 123;
    2             //值类型变成引用类型,装箱,隐式的
    3             object obj = i;
    4             //将从引用类型中提取值类型,拆箱,显式的
    5             int j = (int)obj;

    代码过程如图:

     拆箱的操作包括:

    • 检查对象实例,以确保它是给定值类型的装箱值。

    • 将该值从实例复制到值类型变量中。

    装箱和拆箱对程序性能的影响

      相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。 对值类型进行装箱时,必须分配并构造一个新对象。反之,拆箱所需的强制转换也需要进行大量的计算。所以在程序中应该尽量减少装箱和拆箱的操作。

    愿你我既可以朝九晚五,也可以浪迹天涯;愿你我既可以拈花把酒,也能围炉诗书茶。
  • 相关阅读:
    单选、复选框控制表格行高亮 JQuery
    java内存泄露处理的方法
    spring几种Dao支持配置
    遇见你,是我最美丽的意外
    JavaClassLoader的一些热运用
    CSS Sprites 图片整合技术
    关于前端工程师与其他岗位协作的想法
    JAVA断言使用
    dreamover 模板
    javascriptdom学习笔记
  • 原文地址:https://www.cnblogs.com/xiaoheihei/p/6486974.html
Copyright © 2011-2022 走看看