基本数据类型和包装类直接的对应关系
基本就是类型的首字母大写,除了 Integer 和 Character。
装包/装箱
装包(装箱)的概念
把简单类型 包装成 对应的包装类
装包的形式(两种)
自动装包
显示装包
代码示例
public class TestDemo3 { public static void main(String[] args) { int a = 10; //显示装包方法1: Integer integer1 = new Integer(a); //输出结果为10 System.out.println(integer1); //显示装包方法2:使用valueof方法 Integer integer2 = Integer.valueOf(a); //输出结果为10 System.out.println(integer2); //自动装包 //自动装包程序内部其实也是调用了Integer.valueof方法 Integer integer3 = a; //输出结果为10 System.out.println(integer3); } }
拆包/拆箱
拆包(拆箱)的概念
把包装类变为简单类型
拆包的形式(两种)
自动拆箱
显示拆箱
代码示例
public class TestDemo3 { public static void main(String[] args) { //自动拆箱 Integer integer = 10; int b = integer; //输出结果为10 System.out.println(b); //显示拆箱 //调用intValue方法 int c = integer.intValue(); //输出结果为10 System.out.println(c); //调用doubleValue方法 double d = integer.doubleValue(); //输出结果为10.0 System.out.println(d); } }
练习(一般出选择题)
判断下面的语句是true还是false
public class TestDemo3 { public static void main(String[] args) { Integer a = 100; Integer b = 100; //true System.out.println(a == b); Integer c = 139; Integer d = 139; //false System.out.println(c == d); } }
为什么等于100的时候为true,等于139的时候就为fasle了呢?
答:首先我们把简单类型给包装类是装包,装包底层调用的都是Intger.valueOf方法,下面我们来看valueOf方法的源码:
可以看到当i=100的时候此时进入到我们的valueOf方法中,然后进行if语句的判断:
可以看到当我们点到low的时候,low的值为-128,high的值如下所示,为127
所以当我们传入100的时候,100此时大于-128,小于127,所以执行里面的语句,可以看到最后返回的是一个缓存数组cache,这个数组的取值范围为-128-127,说明数组中一共有256个数字,然后当i=100的 时候,此时要返回的值在数组的下标值为100+(-(-128))=228,所以此时返回cache数组中下标为228所对应的数字.也就是100这个数字,所以此时当我们判断a==b的时候,其实就是两个数字判断是否相等,此时当然相等,所以返回true.
而当我们输入的形参i值为139时,此时其范围已经超出了-128到127之间,那么此时便会返回一个新的对象,所以说c,d会分别创造一个自己的对象,那么前面我们说过,对象和对象之间的比较其实就是引用和引用之间的比较,而其比较的就是地址是否相同,c,d每次创建的新的对象都存在堆中,而地址是不相同的,所以c == d的值为false