装箱与拆箱-好汉001
2013-10-19 14:46
218 查看
问题:
什么是装箱与拆箱?
区别是什么?
作用是什么?
代码实现例子?
解答:
第一点:
装箱就是把值类型转换成引用类型的过程;反之拆箱就是引用类型转换在值类型的过程;
值类型就是变量的数据存储在栈内存,就是变量名就是包括了数据;引用类型则是变量数据地址存在栈,地址指向堆内存,堆内存储存着真正数据,变量名是一个地址,指向堆内存地始位置;
值类型变量当超出作用域时,内存自动回收,与堆则要等垃圾回收;
值类型有:结构类(数据类型,bool,用户自定义结据),杖举,可空类型。
引用类型有:自定义类,接口等;
第二点;
装箱可以explicit或implicit; 如object o = 3;object oo = (object)4;
拆箱则要显式:object o = 3; int a = (int)o;
装箱与拆箱一般在我们不知不觉中产生,如:
data d = new data();//值类型;
d.a = 4;
ArrayList al = new ArrayList();
al.Add(d);//产生装箱过程,刚值类型数据拷贝一份进堆;
data dd =(data)al[0];//拆箱,从堆中,拷贝一份数据进栈;
dd.a = 5;
可以看出,这样对性能有影响;减少出现这样的情况;
第三点:
装箱与拆箱可解决部分不确定类型的影响,只要合适地转换就能解决部分问题;但现在流行用泛型解决问题;
ps:待各位指向不足与提供更深入探讨;
什么是装箱与拆箱?
区别是什么?
作用是什么?
代码实现例子?
解答:
第一点:
装箱就是把值类型转换成引用类型的过程;反之拆箱就是引用类型转换在值类型的过程;
值类型就是变量的数据存储在栈内存,就是变量名就是包括了数据;引用类型则是变量数据地址存在栈,地址指向堆内存,堆内存储存着真正数据,变量名是一个地址,指向堆内存地始位置;
值类型变量当超出作用域时,内存自动回收,与堆则要等垃圾回收;
值类型有:结构类(数据类型,bool,用户自定义结据),杖举,可空类型。
引用类型有:自定义类,接口等;
第二点;
装箱可以explicit或implicit; 如object o = 3;object oo = (object)4;
拆箱则要显式:object o = 3; int a = (int)o;
装箱与拆箱一般在我们不知不觉中产生,如:
data d = new data();//值类型;
d.a = 4;
ArrayList al = new ArrayList();
al.Add(d);//产生装箱过程,刚值类型数据拷贝一份进堆;
data dd =(data)al[0];//拆箱,从堆中,拷贝一份数据进栈;
dd.a = 5;
可以看出,这样对性能有影响;减少出现这样的情况;
第三点:
装箱与拆箱可解决部分不确定类型的影响,只要合适地转换就能解决部分问题;但现在流行用泛型解决问题;
ps:待各位指向不足与提供更深入探讨;
相关文章推荐
- 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0
- 【面试题】懒汉式的多线程安全问题解决方案
- UIImage图片的缩小与放大
- 线程池的研究及实现
- Pinyin4j的基本用法
- Pinyin4j的基本用法
- css3制作左右拉伸动画菜单
- 作业3(6)
- 一个屌丝从Windows到Mac平台的使用告白(三)
- 正则表达式
- 三维凸包模板_HDU 3662 3D Convex Hull
- Java核心编程五:泛型概念
- 这种情况下可以用位存储
- Mysql导出导入乱码问题解决
- 04栈的压栈、出栈、遍历
- js验证电子邮箱的正则表达式使用
- JavaScript Tutorial 03 #Array#
- 如何使用automake来管理你的编译
- AngularJS中service与factory的使用
- mysql数据库解决数组不能进行位操作的问题