包装类是比较容易被人忽视的一个东西
1、JAVA为什么会有这个东西
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。
2、它是啥
包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:
基本类型 包装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可。
3、区别:
基本类型一般都是把值放在栈空间的,而包装类是栈空间放地址,值放在这个地址指向的堆空间:
int i = 5;//直接在栈中分配空间
Integer i = new Integr(5);//对象是在堆内存中,而i(引用变量)是在栈内存中
比如: Integer 的默认值是 null,int的默认值0
4、它有哪些主要功能
这些类的用途主要包含两种:
- 作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
- 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
- (其他后文提到的一些特性其实也属于这两种)
5、一般人会在什么时候注意、用到它
- 当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的外覆类了。Java中每种基本类型都有相应的外覆类。
- 面试题里考你自动拆装箱的时候
6、它的一大特点、难点:自动拆装箱
用不着先不管,暂时跳过,(好像也不难)。。
可以参考:
7、一个诡异
- 没有方法可以直接改变一个Integer对象的值,只能重新初始化一个新的
- 这个其实是我这次研究这个东西的主要目的,后来发现真的不可以
- 网上直接提这个的很少,有一些评论里提到了,然后我确实在JAVA7的API里找不到接口