1.包装类是什么?
java中我们经常将基本数据类型转换为对象,例:将基本数据类型存储到object[]数组或集合中进行操作
为了解决这个问题,Java在设计类的时候为每个基本数据类型设计了一个对应的类进行代表
这八个和基本数据类型对应的类统称包装类
包装类位于java.lang包下
以下是八种数据类型对应的包装类
byte--Byte
boolean--Boolean
short--Short
char--Character
int--Integer(常用)
long--Long
float--Float
double--Double
这八个包装类,只有int和char对应的包装类有比较大的差别
2.包装类的用法
包装类的主要用途有两种:
1.作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如Object[]、集合等的操作
2.包含每种基本数据类型的相关属性,如最大值和最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化)
例:(Interger类的使用,其他包装类用法类似)
3.自动装箱和拆箱
自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的相互转换。(JDK1.5后,java才有自动装箱和拆箱)
1.自动装箱
基本数据类型处于需要对象的环境中时,就会自动转换为“对象”。
例:在JDK1.5之前,Integer i=5是错误的,必须写成Integer i=new Integer(5),这样实现了基本数据类型转换为包装类。
而JDK1.5之后,Integer i=5这样的语句就可以实现将基本数据类型转换为包装类。
这是因为JVM帮我们执行了Integer i=Ingeter.valueOf(5)这句话。这就是自动装箱。
2.自动拆箱
每当需要一个值的时候,对象回自动转成基本数据类型,没必要再去显示调用intValue()、doubleValue()等转型方法。
例:Integer i=5;int j=1;这样的过程就是自动拆箱
总结:
自动装箱的过程是通过调用包装了的valueOf()方法实现的,而自动拆箱过程是通过调用包装类的xxxValue()方法实现的
例:
4.包装类缓存问题
整形、char型所对应的包装类,在自动装箱时,对于-128~127这个区间的值会进行缓存处理,其目的是提高效率
缓存处理原理:
如果数据在-128~127之间,那么在类的加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中
。每当自动装箱过程发生时,或者手动调用valurOf()时,就会先判断数据是否在该区间,如果在,则直接获取数组中对应的包装类对象引用
,如果不在则会通过new调用包装类的构造方法来创建对象。
例: