2019.4.10_基本类型与包装类2---装箱与拆箱
在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。
1、那什么是装箱和拆箱呢?我们分别来看下
装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱
2、为什要需要有包装类型
包装类型将基本类型的值包装在对象中,这样就可以使用对象的方法操作基本类型,类型之间的转换需要使用包装类型的方法才能完成,因此需要有包装类型。
使用包装类的parseXXX方法还可以实现不同类型之间的转换,如将数字字符串转换为int类型:
int i = Integer.parseInt("23");
public class SimpleTest { public static void main(String[] args) { Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1==i2); //①true System.out.println(i3==i4); //②false } }
①处结果为true,②处为false,原因是什么呢?(我的jdk是1.8版本的)
Integer i1 = 100;执行的操作是100先通过valueOf()方法进行装箱操作,Integer.valueOf()的源码如下:
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
Integer比较特殊,在-128到127之间,会走缓存,不在这个区间的数会走new Integer(i),也就是会创建新的对象,因此,100比较的时候是true,200比较的时候是false
基本类型和包装类之间经常需要互相转换,以 Double为例(其他几个包装类的操作雷同哦):
public class HelloWorld {
public static void main(String[] args) {
// 定义double类型变量
double a = 91.5;
// 手动装箱
Double b =new Double(a);
// 自动装箱
Double c = a;
System.out.println("装箱后的结果为:" + b + "和" + c);
// 定义一个Double包装类对象,值为8
Double d = new Double(87.0);
// 手动拆箱
double e =d.doubleValue();
// 自动拆箱
double f = d;
System.out.println("拆箱后的结果为:" + e + "和" + f);
}
}
运行成功
装箱后的结果为:91.5和91.5
拆箱后的结果为:87.0和87.0
装箱是把基本类型封装成包装类的过程,但是要注意两者的对应关系,不对应不能叫做装箱,比如说牛奶装进牛奶盒,不能装进罐头里。
这种说法不太严格,拆箱是一种对应的转换,比如Integer转为int,Double转为double。转换成基本数据类型可以调用包装类的函数来进行相应的转换。
包装类是java.lang包里的类,装箱是基本类型转换成包装类的一种操作,分为自动装箱和手动装箱。
相关连接:https://blog.csdn.net/durenniu/article/details/81051402