反射、装箱拆箱、ArrayList与Array的区别

Posted on 2005-09-11 23:11 天生舞男 阅读(125) 评论(0) 编辑 收藏 引用 网摘 所属分类: SPS

1 什么是反射
    Reflection,中文翻译为反射。
    这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:

Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名空间下。

装箱和拆箱

.NET的所有类型都是由基类System.Object继承过来的,就是说所有的事物都是对象。.NET把类型分成了两类:

  • 值型---包括:Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct)。
  • 引用型---包括:类、数组、接口、委托、字符串等
  1. 值型在栈中分配内存,它们在声明的同时就初始化,以确保数据不为NULL,如:
    例如:
    byte b = 33;
    值型不需要Garbage Collection来回收占用的内存。超出了作用范围后,系统会自动释放。
  2. 引用型在堆中分配内存,初始化为null。引用型是需要Garbage Collection来回收内存的。

装箱(boxing)就是隐式的将一个值型转换为引用型对象

拆箱(unboxing)就是将一个引用型对象转换成任意的值型

装箱举例:
int n=3;
System.Object obj = n;

正如上面所说,n这个变量的内存应该是在栈中分配内存,而obj则应该在堆中分配内存。这时候系统都作了哪些工作呢?系统在堆中分配了一个对象obj,并将n的值复制给它。这就叫做装箱(boxing)。

拆箱举例:
int i=0;
//将 i 装箱
System.Object obj = i;
//将obj拆箱
int j=(int)obj;

ArrayList与Array的区别

ArrayList就是传说中的动态数组,就是Array的复杂版本.

它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

区别的关键:ArrayList内部封装了一个Object类型的数组。

尽量使用Array,ArrayList不到不得已,不要使用,因为:

  1. 内部的Object类型的影响
    对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。
    但是恰恰对于大多数人,多数的应用都是使用值类型的数组。
    消除这个影响是没有办法的,除非你不用它,否则就要承担一部分的效率损失,不过这部分的损失不会很大。
  2. 数组扩容
    这是对ArrayList效率影响比较大的一个因素。
    每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

Source: 反射、装箱拆箱、ArrayList与Array的区别 - 天生舞男 - 博客园

转载于:https://www.cnblogs.com/joeyliang/archive/2007/03/14/674525.html

反射、装箱拆箱、ArrayList与Array的区别 - 天生舞男 - 博客园相关推荐

  1. Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数

    1.For each循环:1.1.语法:1.2.For each循环的使用:1.3.嵌套For each循环:1.4.三种循环遍历集合的列举:1.5.增强的for循环的缺点:2.自动装箱/拆箱(Aut ...

  2. box unboxing(装箱 拆箱) C#编程指南

    文章目录[点击展开](?)[+] box装箱消耗大 示意图 unboxing拆箱 示意图 总结 文档资料 box(装箱)消耗大 box在堆栈中创建一个新的对象,性能消耗大 int i = 123; / ...

  3. CLR via C# 中关于装箱拆箱的摘录

     装箱: 为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制.下面总结了对值类型的一个实例进行装箱操作时在内部发生的事情. 1.在托管堆中分配好内存.分配的内存量是值类型的各 ...

  4. java自动装箱拆箱原理

    java自动装箱拆箱原理 看了很多博主都没写原理,只是浅显地说了自动装箱拆箱的含义,我就把这个必须知道的知识写一下吧 1.自动装箱 以int -> Integer为例,Integer integ ...

  5. 第十六节 装箱拆箱 类和结构

    View Code 案例1:装箱拆箱class Program{/// <summary>/// 装箱,拆箱/// </summary>/// <param name=& ...

  6. java自动装箱拆箱深入剖析

    这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:  java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装 ...

  7. java装箱拆箱_Java中的自动装箱与拆箱

    自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象.自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接. 如 ...

  8. 为什么需要java包装类,装箱拆箱,基本类型与字符串之间的转换,java数据类型

    为什么需要包装类? 首先,Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,将每个基本数据类型设计一个对应的类进行代表,这种方式增强了Java面向对象的性质. 其次,如果 ...

  9. Java自动装箱/拆箱 - Java那些事儿

    昨天Java基本数据类型和引用类型一文中漏了几张图,已经补上,需要的自己回头去看,本系列文章首发于公众号:saysayJava. 在让人疑惑的Java代码 - Java那些事儿 一文中我们说到编译器自 ...

最新文章

  1. php curl流方式远程下载大文件
  2. osg渲染到纹理技术(二)
  3. python 循环语句结果存储_Hello,Python!小鲸教你学Python(八)条件语句和循环
  4. 黑客成长之路-01.新手篇-设置路由器
  5. svn服务器搭建和使用_使用Gitea搭建自己的Git服务器
  6. eyoucms页面调用
  7. Spark、Hadoop大数据平台搭建
  8. wps画流程图交叉弧形_word流程图-WPS绘制流程图的正确打开方式,超级简单
  9. 记忆测试系统java代码_JAVA课程设计——记忆测试系统(附源程序).doc
  10. 基于大佬的代码实现看板娘效果(三段代码实现)
  11. (附源码)SSM网络故障报修系统 毕业设计 291146
  12. 雷神笔记本做java,八代酷睿+144Hz电竞屏 雷神迎来新911黑幽灵游戏本评测
  13. linux网络编程--网络编程的基本函数介绍与使用
  14. Mac 高效工作指南
  15. linux天文软件下载,天文爱好者控:八款优秀的Linux天文学软件
  16. 2020B证(安全员)考试及B证(安全员)实操考试视频
  17. win10taskkill强行结束进程_通过命令行强制结束进程
  18. 百度编辑器(ueditor)上传视频二次调用丢失链接的解决方法
  19. VC++类型转换大全
  20. 0422“数学口袋精灵”BUG发现

热门文章

  1. win10无法启动_win10电脑开机进入不了系统如何解决?
  2. QQ群共享总是下载失败怎么解决?
  3. 【汇智学堂】docker网络管理之二
  4. 关系网络lbs的应用_冒泡网王江:熟人关系将成LBS最重要商业模式
  5. hbuilderx ios自定义基座真机测试
  6. 学习篇-Activiti-29-流程定义存储表
  7. Typora文字变红
  8. eclipse报 The word is not correctly spelled问题
  9. 地图php,php调用google地图
  10. 文字编辑软件的颠峰作品——Word发展历史全析