拆箱和装箱

1、拆箱和装箱,我们都知道的是

装箱:就是将值类型转换为引用类型
拆箱:将引用类型转换为值类型

2、那么看下面一个例子:

string str=“123”
int n=Convert.ToInt32(str);

string是引用类型,int为值类型。那么,此处有没有发生拆装箱呢

答案是:没有

原因:看两种类型是否发生了装箱或拆箱,要看这两种类型是否存在继承关系。有继承关系才有可能
发生装箱和拆箱

3、现在,我们只知道拆装箱的定义,那么拆装箱到底给我们的应用程序带来了好处还是坏处呢?

我们可以看下面一段代码:

class Program
    {
        static void Main(string[] args)
        {
        //    int n = 10;
        //    object o = n;//装箱
        //    n = (int)o;//拆箱
            ArrayList list = new ArrayList();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 10000000; i++)
            {
                list.Add(i);//装箱10000000次用时约1.477
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);
            Console.ReadKey();
            //List<int> list = new List<int>();
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            //for (int i = 0; i < 10000000; i++)
            //{
            //    list.Add(i);//无须装箱,用时0.12秒左右
            //}
            //sw.Stop();
            //Console.WriteLine(sw.Elapsed);
            //Console.ReadKey();
        }
    }

我们知道list集合所装的类型为object类型,因此在每次添加int类型数据时,都要进行装箱操作,而list<int>泛型集合类型为int,添加int类型数据时无须进行装箱操作

通过运行结果我们可以看出list集合进行同样数据的添加操作是所费时间明显高于list<>泛型集合。

因此拆装箱操作会影响(降低)我们应用程序的运行速度,故在开发中应该尽量避免拆装箱操作!

时间: 2024-10-12 21:27:22

拆箱和装箱的相关文章

Java知多少(24)包装类、拆箱和装箱详解

虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单.有效地进行常规数据处理. 这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据类型转换为 String 类型则要麻烦得

拆箱与装箱

拆箱与装箱是一个早就接触的知识点,但是自己并没有系统的总结过,今天我们就来看一下: 一.首先介绍几个知识点: 值类型: 1. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null. 2. 值类型超出作用范围系统自动释放内存. 3. 主要由两类组成:结构,枚举(enum),结构分为以下几类: 1. 整型(Sbyte.Byte.Char.Short.Ushort.Int.Uint.Long.Ulong) 2. 浮点型(Float.Double) 3. decimal 4. bool 5. 

C#之拆箱,装箱

C#的数据类型分为三类,值类型,引用类型和指针类型.指针类型只能用于不安全模式,而值类型和引用类型通过拆箱和装箱机制可以相互转换,通过中间的object类型,所以C#的所有种类直接或间接地从object类种类派生而来. 值类型 值类型数据存储在栈中,栈用于存放固定长度的数据,分为简单类型,结构类型和枚举类型. 结构类型:把不同类型的数据组合在一起,便于使用.跟类相似,包含数据成员和函数成员的数据结构,类类型是一种引用类型.结构类型用关键字Struct定义,可以嵌套定义. 枚举类型:成员只能是整数

拆箱,装箱,枚举,结构

枚举: 1.不能定义自己的方法 2.它们不能实现接口 3.不能定义属性和索引器 4.枚举成员之间用“,”隔开 5.枚举成员如果没有赋值,那么它的第一个值默认为0 6.后面的成员取值是前一个成员取值+17.枚举成员只能赋值为整型 类与结构:1.类和结构都是创建对象的模版2.结构是值类型,类是引用类型,结构不能有析构函数3.类可以有析构函数结构不能声明默认构造函数(没有参数的构造函数)4.结构可以声明构造函数,但他们必须带参数,并且需要把所有字段都要赋值 5.在结构中初始化实例字段是错误的,在类中是

c# 的引用类型和值类型和数据的拆箱和装箱

c#中引用类型和值类型的区分: 一般的以calss声明的变量的类型是引用类型的,引用类型是存放到内存的堆上存放的是数据的地址.值类型是像int float 还有struct等属于值类型的数据类型,值类型的数据是存放在堆栈上的存放的数据本身. 拆箱和装箱: 我们可以用一个例子来理解装箱和拆箱的关系和作用.我们都知道小时候在村里有哪种你给他一些铝制品他可以给你溶成一个你想要的其他的铝制器件.装箱和拆箱就是这个原理.例如:你想把一种数据类型转化为另一种数据类型,int16到int32的数据类型的转化,

Java中的拆箱和装箱

首先说一下Java中的包装类,Java语言是一个面向对象的语言,但是Java中的基本数据类型却不是面向对象的,这在实际使用时存在很多的不便(比如,我们不能直接想集合Collections中放入原始类型值,因为集合只接收对象).为了解决这个不足,在设计类的是为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class). 基本数据类型 包装类 byte Byte boolean Boolean short Short char Charact

第十七节:易混淆的概念(静态和非静态、拆箱和装箱)

一. 静态和非静态 二. 拆箱和装箱 1 ! 作       者 : Yaopengfei(姚鹏飞) 博客地址 : http://www.cnblogs.com/yaopengfei/ 声     明1 : 本人才疏学浅,用郭德纲的话说"我是一个小学生",如有错误,欢迎讨论,请勿谩骂^_^. 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,如需代码请留下你的评论,加我QQ:604649488 (备注:评论的博客名) 原文地址:https://www.c

java 自动拆箱与装箱(基本数据类型与引用类型)

(本文章不为原创文章,摘抄,忘记了出处,抱歉) 1.Java数据类型 在介绍java的自动装箱和拆箱之前,我们先来了解一下Java的基本数据类型. 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference Type(引用类型).基本类型的数值不是对象,不能调用对象的toString(). hashCode().getClass().equals()等方法.所以Java提供了针对每种基本类型的包装类型.如下: INDEX 基本类型 大小 数值范围 默认值

浅谈Java拆箱、装箱

java语言规范中说道:在许多情况下装箱与解拆箱是由编译器自行完成的. 自动装箱:自动将基本数据类型封装为对象(包装器)类型, 自动拆箱:就是自动将对象(包装器)重新转化为基本数据类型: 例如用int来举例: //装箱 Integer i= 10; 相当于Integer i= new Integer(10);//拆箱 int n = i; 经反编译器反编译可以得出结论: 在装箱的时候自动调用的是Integer的valueOf(int)方法. (valueOf(int i) 返回一个表示指定的 i