上篇博文-->包装类缓存池浅析说到
在这行代码上
Integer i = 100;
编译器会自动为我们加上一个valueOf方法,即
Integer i = Integer.valueOf(100);
这个Integer.valueOf()方法就是 自动装箱,把一个基本数据类型的值,包装成一个相应的类,在这个包装类中包含一些对此种数据类型常用的一些相关操作。
所以,我们也就知道了什么是自动拆箱,就是把一个包装类转换为一个基本数据类型,比如:
Integer i = 100;
int value = i + 1;
Integer i = Integer.valueOf(100);
int value = i.intValue() + 1;
我们由上能看出,自动装箱使用的是Intger.valueOf()方法,从其形式可以得出,此方法是静态方法;
自动拆箱使用的是intValue()方法,对应的,此方法只是一个普通方法,只能通过创建对象的方式调用。
嗯?为什么呢?包装类不就比基本数据类型多几个方法吗?顶多麻烦我转换一下不就好了?
但是,你想过这个问题吗
比如有一个Student类
class Student {
//记录姓名
private String name;
//记录学号
private String id;
//记录考试成绩
private int score;
...
...//类体
...
}
String类型的好说,引用数据类型,不赋值时为null,我们也可以清楚的知道它为null的原因就是没有填。
但是score呢,你不对它进行初始化,它就默认为0,当我们回头再使用这个数据值时,我们如何得知这个0,是你考了0分,还是缺考了呢?
包装类为我们解决了这个问题
class Student {
//记录姓名
private String name;
//记录学号
private String id;
//记录考试成绩
private Integer score;
...
...//类体
...
}
因为Integer是一个
类,所以当调用参数时返回一个null,那我们就可以清楚的知道---这是缺考;如果返回一个0,那我们同样可以分辨出,这是考类0分
此外,如果我们想把score存储到集合里去。孰优孰劣显而易见。
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<int> list2= new ArrayList<>();
1,包装类比基本数据类型提供了丰富的属性和API,方便使用
2,包装类支持泛型
3,包装类更符合面向对象的思想,更能模拟现实世界。