1.包装类
1.1为什么要引入包装类
- 肯定有很多人有这样的疑问,我用这些基本类型挺好用的呀,也挺简单的,为什么要引入包装类呢,多麻烦呀。
- Java是面向对象的语言,在很多的类和方法种的参数都需要使用对象(例如集合),但是基本类型又不是面向对象的,这就造成了很多的不方便。比如下列的语句就编译不通过。
Stack<char> stack = new Stack<>();
- 为了解决该问题,我们就引入了包装类,顾名思义,就是将基本类型包装起来,使其具备对象的性质,包括可以添加属性和方法。
1.2包装类与基本类型
- Java的基本类型(也就是内置类型)有8种,则它对应的包装类也有8种。
基本类型 | byte | short | int | long | char | boolean | float | double |
---|
包装类 | Byte | Short | Integer | Long | Character | Boolean | Float | Double |
Integer num = new Integer(1);
2.自动装箱和自动拆箱
- 自动装箱是Java编译器在编译原生类型和对应的包装类型上做的自动转换。例如把int类型转换成Integer,把double类型转换成Double等等。
2.1基本类型与包装类的差别
- 基本数据类型不是对象,也就是使用int double char boolean等定义的变量,常量,基本数据类型没有可调用的方法
int i = 1;
Integer i= 1;
2.2自动拆箱
Integer i=100;
Integer i= Integer.valueOf(100);
- 对于-128到127(默认是127)之间的值,Integer.valueOf(int i)返回的还是缓存的Integer对象。所以a和c指向的是同一个对象,所以为true.
- 超过-128~127的范围,就不存在上面的规律了。