什么是装箱拆箱?
Java有8种基本数据类型,并且为这8种类型提供了包装器类型。比如说int类型的包装器类型是Integer。
装箱是指将基本数据类型转换成对应的包装器类型。拆箱是指将包装器类型转换基本数据类型。
Integer i = 10; //自动装箱
int n = i; //自动拆箱
装箱拆箱是如何实现的
在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。
也就是说Integer i = 10实际上是Integer.valueOf(10),int n = i实际上是i.intValue()
面试中的相关问题
Integer integer = 1;Integer integer1 = new Integer(1);//包装器类型的构造方法必然会创建一个新的对象Integer integer3 = 1;int i = 1;System.out.println(integer==integer3);//Integer.valueOf会对-128-127的数做缓存,所以integer和integer3指向同一个对象System.out.println(integer==integer1);//两个操作是引用类型时,这种情况不会触发拆箱,==是比较两个对象的内存地址,结果是falseSystem.out.println(integer==i);//,integer会拆箱成int类型,结果是trueSystem.out.println(integer<integer1);//integer和integer1都会拆箱成int类型,结果是false
注意:除了==或者!=操作两个包装器实例的情况是比较对象内存地址外,其他的操作符操作包装器类型的话都会触发自动拆箱。