Wapper类的拆包与自动装配与一个类的占用空间

来源:互联网 发布:线切割锥度编程实例 编辑:程序博客网 时间:2024/05/17 22:23

java中数据类型一般分为基本类型,引用类型(数组属于引用类型)。基本类型是为了方便JVM快速的进行运算,是存放在JVM的栈之中。引用类型也存在栈中,但是引用的对象是存放在堆上面。包装类可以将基本类型当做类来处理。Integer,Boolean,Double,Character,Float,Byte,Short,Long,Void为对应基本类型的包装类。

        Integer i1 = 127;        Integer i2 = 127;        System.out.println(i1 == i2);        Integer i3 = 128;        Integer i4 = 128;        System.out.println(i3 == i4);

运行结果为:
true
false
第一个很好理解,int类型自动装配成Integer,但是第二个为什么会输出false呢。因为在这里完成了一个new的操作。==是比较两个对象引用是否为一个对象。但是这里为什么要new一个Integer对象呢。因为在基本类型有一个字节的缓存,在这个范围内的值是存放在常量池(存放在数据运行空间的PermGen里)如果这个数据是在-128~127之间,char对象为0~127。,直接从常量池里取出即可。否则new一个对象。

Integer i1 = 128;//等价于Integer i2 = new Integer(128); 

基本类型放在栈上面主要是为了提高运行速度,因为基本类型的大小是固定的。

类型 大小(byte) byte 1 short 2 char 2 int 4 float 4 double 8 long 8 boolean 1bit

一个对象的引用为4byte,一个空对象在堆上的大小为8byte
例如:

class NewObject  //8{int count;      //4boolean flag; //1Object ob; //4}

所占用空间为:8 + 4 + 1 + 4 = 17。又因为jvm的存储都是8byte的整数倍,因此占用空间为24byte。

0 0
原创粉丝点击