![cf507864875532ba15097bbddb9ce6f2.png](https://i-blog.csdnimg.cn/blog_migrate/6d43d676ef73d4014b33bcd974bc9265.jpeg)
1. 导读
JAVA中针对八种基本数据类型提供了相对应的包装类, 今天主要基于几个问题来分享下个人对于包装类的理解, 本期先分享下面两个问题:
.1 什么是包装类? 有了基本类型, 为什么还需要有包装类;
.2 包装类干了什么?
2. 什么包装类
众所周知, JAVA提供了八种基本类型, 同时也对这八种基本类型做了相应的封装, 形成了八种包装类:
![3ace491bd4d7f2e393d7a9e7062ee82e.png](https://i-blog.csdnimg.cn/blog_migrate/f47bdb671d9443591d68b47c8a9a34e2.jpeg)
其实void在JAVA也是一种数据类型, 也有对应的包装类Void, 只是我们无法对其进行操作, 也就没有放在上面的表格中了;
3. 为什么需要包装类
JAVA是面相对象的编程语言; 那么要理解面相对象, 首先需要知道这个对象是什么? 我的理解是:
.1 对象具有自己的属性以及行为;
.2 对象可以通过自己的行为或者动作向外界传递信息;
那么面相对象就是通过对象之间的信息交互来实现整个程序的功能; 而封装, 继承 和 多态是基于语言层面的约束;
有了面相对象编程的概念, 我们再来看为什么JAVA需要包装类;
.1 包装类在基本类型的基础上做了封装, 使其有了自身的行为; 那么有了行为有什么好处呢? 我们举个例子来说明:
![8f0ed596bfb10efe0b39fa5593ec3ebf.png](https://i-blog.csdnimg.cn/blog_migrate/e717db03754ec41494712b3073789283.jpeg)
封装类
![f190fc7987900bfe5eb156fb1f221191.png](https://i-blog.csdnimg.cn/blog_migrate/7f1442f133ac43b1849fada47b5dbe0c.jpeg)
执行结果
通过int和Integer举例, 展示了基本类型和包装类型的判断和转String的区别:为什么达到同一个目的, 基本类型需要借助其他手段来实现; 而包装类却可以通过自身的动作达到, 这就是基本类型和包装类型的不同, 这也是面相过程与面相对象的区别: 面相过程需要自己实现需求, 面相对象则是调用目标对象对应的方法即可;
.2 初始化的不同: 未赋值时, 基本数据类型默认是0, 而封装类型默认是null; 当需要区分赋值与未赋值时, 封装类型就显得十分友好了; 比如在构建更新实体时, 有个字段是0, 就需要判断他的原始值是0还是需要更新成0; 而null则没有这种烦恼了;
.3 前面说过JAVA是面相对象的语言, 其很多设计都是针对对象来的, 比如HashMap的设计, 在插入时, 需要先调用插入key的Object::equals, 但是基本数据类型是没有行为的, 意味着基本数据类型无法作为HashMap的key; 如果没有封装类, 我们就无法实现用数值类型作为key了;
故而为何需要封装类?
.1 JAVA是面相对象的语言, 其语言设计初衷就需要"万物皆对象