什么是自动拆箱和自动装箱
Java中基本类型有八种,可以分为四类:
整形:
byte(一个字节来存储,范围为-2^7— 2^7-1),
short (两个字节来存储,范围为-2^15— 2^15-1),
int(四个字节来存储, -2^31— 2^31-1) ,
long(八个字节来存储,范围为-2^63— 2^63-1)
浮点型:float,double
字符型:char
布尔类型:boolean
注意事项:
同类型在进行计算时,可能会超出范围,产生溢出。溢出并不会报异常也没有任何的提示。所以在进行同类型计算式一定要注意计算的结果会不会产生溢出。
包装类型:
java是一个面向对象的语言,但是java的基本类型确是不面向对象的,为解决这个问题在设计类时,每个基本类型都设计了一个对应的类进行表示,这样和八个基本类型相对应的类称为包装类(wrapp calss)。
包装类位于java.lang包,包装类和基本类型的对应关系如下:
基本数据类型 | 包装类 |
---|---|
bety | Bety |
short | Shoty |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
为什么需要包装类:
因为java要面向对象,所以创建包装类使其拥有对象的特征,,并且为其添了相应的属性和方法,丰富了基本类型的操作,
拆箱和装箱:
有了基本类型和包装类型,之间肯定要进行转换。
我们认为包装类是基本类型的包装,所以把基本类型转换为包装类型的过程称之为装箱(boxing);
反之将包装类转换为基本类型的过程称之为拆箱(unboxing);
在JAVA SE5之前需要手动进行装箱工作可以通过以下代码实现:
Integer i=new Integer(1);
自动拆箱与自动装箱
JAVASE5中为了解决这一问题,java提供了自动装箱和自动拆箱功能。
自动装箱:就是将基本数据类型自动转换为对应的包装类;
自动拆箱:就是将包装类自动转换为基本数据类型:
Integer i=1;//自动装箱
int a=i; //自动拆箱
Integer i=1;可以代替Integer i=new Integer(1),提供自动装箱功能后不需要开发者手动去new一个Integer的对象;
注意:
自动拆箱也会带来一些问题,当包装对象的数值进行比较时,不能简单的使用==来进行判断,当该对象的数值在-128—127之间时可以进行比较,超出范围时应该使用equals进行比较;
Integer a=2;
Integer b=2;
System.out.println(a==b);
System.out.println(a.equals(b));
输出结果为:
true
true
Integer a=200;
Integer b=200;
System.out.println(a==b);
System.out.println(a.equals(b));
输出结果为:
false
true