博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
值类型的装箱拆箱
阅读量:4512 次
发布时间:2019-06-08

本文共 751 字,大约阅读时间需要 2 分钟。

装箱:将值类型转化成引用类型。

下面总结了值类型的实例进行装箱发生的事情。

在托管堆上分配内存,内存大小是值类型各字段所需的内存量。还要加上托管堆所有对象的两个额外成员。(类型对象指针和同步块索引)所需的内存量。

值类型的字段复制到新分配的托管堆内存中。

返回对象地址。该地址是对象的引用。值类型转化成了引用类型。

 

拆箱:将引用类型转成值类型。

1、首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。2、将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。

拆箱不是直接将装箱过程倒过来。拆线的代价要不装箱低的多。拆箱实际上就是获取托管堆中属于值类型那部分字段的地址

的过程,该指针指向包含在一个对象中的原始值类型(数据字段)。所以和装箱不同,拆箱不要求在内存中复制任何字节。拆箱后面紧跟着一次字段复制。

注意:

1.如果包含“对已装箱值类型实例的引用”的变量为null,抛出NullReferenceException的异常。

2.如果引用的对象不是所需值类型的已装箱实例,抛出InvalidCastException的异常。

 

ArrayList和List<T>的区别 

 

泛型集合类对非泛型集合类进行了大量的改进。例如API得到了简化和曾江,集合类的性能也得到了显著提升。

但最大的改进就是泛型集合类允许开发人员在操作值类型的集合时不需要对集合中的项进行装箱操作。单这一项改进,就是性能提高了不少。

这是因为托管堆中需要创建的对象减少了,进而减少了应用程序需要执行的垃圾回收次数。另外,开发人员还获得了编译时的类型安全性源代码,也因为强制类型砖混的次数减少而变得更加清晰。

转载于:https://www.cnblogs.com/unity-carry/p/7859866.html

你可能感兴趣的文章
php小程序-文章发布系统
查看>>
CocosCreator内存调试技巧H5版
查看>>
使用md5加密的登录密码
查看>>
Java 执行jar linux 实例
查看>>
染色(bzoj 2243)
查看>>
理解托管磁盘的原理与优势
查看>>
【beta】nice!-------约吧NABCD
查看>>
Android优秀开源项目
查看>>
[Google Android] HTC A810e ChaCha 解锁 Root
查看>>
[原创]python之简单计算器(超详解,只有基本功能+-*/,还有括号处理)
查看>>
python 多进程简单调用
查看>>
APP压力稳定性测试
查看>>
Java-循环语句和条件语句
查看>>
mysql数据库和禅道安装
查看>>
一、python特性+python安装测试
查看>>
Windows文件操作基础代码
查看>>
1-8
查看>>
任务17:从UML角度来理解依赖
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_2_数据结构_队列
查看>>
Entity Framework操作Oracle数据库实现主键自增问题
查看>>