包装类
- 包装类的作用:例如有时候一个方法需要传一个Object类型参数进去,但我们想传个int类型的数字,这时就需要用包装类将数字包装成Object类型
- java中为8种基本数据类型对应准备了8种包装类型,8种包装类属于引用数据类型,父类是Object
基本数据类型 | 包装类型 | 父类 |
---|---|---|
byte | java.lang.Byte | Number |
short | java.lang.Short | Number |
int | java.lang.Interger | Number |
long | java.lang.Long | Number |
float | java.lang.Float | Number |
double | java.lang.Double | Number |
boolean | java.lang.Boolean | Object |
char | java.lang.Character | Object |
装箱和拆箱
8种包装类中有6个父类都是Number,Number是一个抽象类,无法实例化对象,Number类中有以下方法:
这些方法在包装类中都有,负责拆箱
//基本数据类型-->引用数据类型(装箱)
Integer i=new Integer(123);
//引用数据类型-->基本数据类型(拆箱)
float f=i.floatValue();
System.out.println(f);//123.0
int retValue=i.intValue();
System.out.println(retValue);//123
在JDK1.5之后,支持自动装箱和自动拆箱,就不需要再用Number类中的方法。
//自动装箱
//int-->Integer
Integer x=100;
//自动拆箱
//Integer-->int
int y=x;
==比较的是对象的内存地址,这个运算符不会出发自动拆箱机制,只有±*/等运算才会。java中为了提高执行效率,将[-128,127]之间所有的包装对象提前创建好,放在方法区的整数型常量池中,目的是只要用这个区间的数据不需要再new创建对象,直接从整数型常量池中取出来。
Integer a=128;
Integer b=128;
System.out.println(a==b);//false,创建两个不同的对象,地址不同
Integer c=127;
Integer d=127;
System.out.println(c==d);//true,指向的是整数型常量池中同一个对象,地址相同