Java基本类型与包装类型

来源:互联网 发布:手机淘宝条例 编辑:程序博客网 时间:2024/04/28 00:56

1.Java把内存划分为两种:一种是栈内存,另一种是堆内存 。

(1)在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理.
(2)在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配 而实际的对象是在存储在堆内存中。

2.基本类型与包装类型对应关系

基本类型包装类性byteByte shortShortintIntlongLongfloatFloatdoubleDoublecharCharbooleanBoolean
BigInteger

BigDecimal


其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算,BigInteger 支持任意精度的整数,BigDecimal支持任意精度带小数点的运算.
3.分析基本类型和包装类型产生的原因
(1)基本类型产生的原因:
在堆中分配空间所需的时间远大于从栈中分配存储空间的时间。在Java语言中,new一个对象存储在堆里,我们通过栈中的引用来使用这些对象。但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效,所以就出现了基本类型。
(2)包装类产生的原因:
Java是一个面向对象的语言,基本类型并不具有对象的性质,为了与其他对象相互使用就出现了包装类型(如当需要往集合:ArrayList,HashMap器中放东西时,像int,double这种基本类型是无法放进去的,因为它们不是对象,容器中装的都是对象),它相当于将基本类型“包装起来”,使得基本类型具有了对象的性质,并且为其添加了属性和方法。
(3)基本数据类型与包装类型的转换:
在JDK1.5版本以上支持自动转换:自动拆箱和自动装箱。
举例:
Integer i = new Integer(1);
包装类对象创建的简化写法Integer i = 1;
首先 Integer i = 1;(其实在内存中也是通过 new Integer(1)这种方式创建的)这种方式成为——自动装箱,Integer.valueOf(1)自动完成了对象创建的动作。
然后,加入进行 i = i + 1,运算时右边的i 会先转成基本数据值(自动拆箱)i.intValue(),其实质为:i = i.intValue() + 1 ;然后再和1进行加法运算。右边运算完的结果,再次被自动装箱变成Integer对象赋给i. 
4.基本类型与包装类型的区别:
(1)声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
(2)存储方式及位置不同,基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用(存放在栈中)来使用;
(3)初始值不同,基本类型的初始值根据不同类型而不同,如int为0,boolean为false,而包装类型所有类型的初始值均为null;
(4)使用方式不同,基本类型直接赋值,而包装类型在集合中Collection、Map时经常会使用到。




 




0 0
原创粉丝点击