自动装箱和自动拆箱

来源:互联网 发布:手机端淘宝首页的模板 编辑:程序博客网 时间:2024/06/12 01:04

上篇博文-->包装类缓存池浅析说到

在这行代码上

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()方法,对应的,此方法只是一个普通方法,只能通过创建对象的方式调用。




建议:我们以后在Java所有的成员属性的数据类型,最好使用:包装类型。

嗯?为什么呢?包装类不就比基本数据类型多几个方法吗?顶多麻烦我转换一下不就好了?

但是,你想过这个问题吗

比如有一个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,包装类更符合面向对象的思想,更能模拟现实世界。