自动拆箱和装箱时JDK1.5的新特性。
- 目的及作用
就是用来进行基本数据类型(long、int、short、byte、double、float、boolean、char)和包装类型(Long、Integer、Short、Byte、Double、Float、Boolean、Character)之间的转换。
自动装箱意思就是把基本数据类型的值赋给包装类型(基本数据类型——>包装类型)。
反之自动拆箱意思就是把包装类型的值赋给基本数据类型(包装类型——>基本数据类型)。
具体是怎么做到的可以去看源码,小的才疏学浅只能简单的说是包装类型使用了两个方法:
- 使用valueOf()的方法对基本数据类型进行包装。
- 使用intVlaue()的方法可以得到基本数据类型。
Integer integer = new Integer(23);
int i = integer.intVlaue();
对于自动拆箱和装箱还有特别需要记住的就是包装类的一个特性,下面随小的来看一个特别有意思的程序。
public static void main(String[] args) {
Integer integer1 = 100;
Integer integer2 = 100;
System.out.println(integer1 == integer2);
Integer integer3 = 1000;
Integer integer4 = 1000;
System.out.println(integer3 == integer4);
}
对于上面这段代码你们认为最终输出的结果会是什么呢?
下面揭晓答案:
那么为什么会出现这样的情况呢?
这是因为包装类的valueOf()方法在作怪!!! 当进行基本数据类型转成包装类型(即自动装箱)时,Byte、Integer和Long这些包装类中缓存了一个-128~+127之间的对象,如果对象值在这个范围之内,则直接返回缓存的对象,只有当缓存中没有的时候也就是不在-128~+127之间,那么会再去创建一个对象。
再来包装类的缓存:
Boolean:(全部缓存)
Byte:(全部缓存)
Character(<= 127缓存)
Short(-128 — 127缓存)
Long(-128 — 127缓存)
Integer(-128 — 127缓存)
Float(没有缓存)
Doulbe(没有缓存)