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

    int i = 2000;

       object o = (object)i;

        i= 2001;

       int j = (int)o;

       Console.WriteLine("{0},{1},{2}", i, o, j);

        结果:2001,2000,2000  解读:object o 为装箱的操作,int j为拆箱操作。

       将值类型转换为引用类型,需要进行装箱操作(boxing):

    1、首先从托管堆中为新生成的引用对象分配内存。

    2、然后将值类型的数据拷贝到刚刚分配的内存中。

    3、返回托管堆中新分配对象的地址。

    可以看出,进行一次装箱要进行分配内存和拷贝数据这两项比较影响性能的操作。

    将引用内型转换为值内型,需要进行拆箱操作(unboxing):

    1、首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。

    2、将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。

    经过这2步,可以认为是同boxing是互反操作。严格意义上的拆箱,并不影响性能,但伴随这之后的拷贝数据的操作就会同boxing操作中一样影响性能。

  • 相关阅读:
    ElasticSearch Java API
    ElasticSearch 核心概念
    ElasticSearch 基本操作
    ElasticSearch概述
    Spring AOP 实现原理与 CGLIB 应用
    Spring AOP 实现原理
    线程池队列饱和策略
    Hibernate 事物隔离级别 深入探究
    Hibernate 所有缓存机制详解
    Java NIO API详解
  • 原文地址:https://www.cnblogs.com/acdyf/p/4969023.html
Copyright © 2011-2022 走看看