JAVA包装类、自动装箱、拆箱
一、为什么需要包装类
包装类的主要功能是针对基本数据类型的对象转换而实现的。若想把基本数据类型以类或者对象的形式进行处理,就需要转换成包装类。
二、有哪些包装类
基本数据类型有八种,对应的包装类也有八种,对应关系如下:
概括的说,包装类分为两种:
- 对象型包装类(Object直接子类):Boolean、Character
- 数值型包装类(Number直接子类):Integer、Byte、Long、Short、Float、Double
三、装箱、拆箱
装箱:将基本数据类型保存到包装类中(利用包装类的构造方法即可)
拆箱:从包装类中获取基本数据类型
public class Demo {
public static void main(String[] args) {
// 自动装箱
Integer integer = 10;
// 自动拆箱
int num = integer;
// 包装类的对象可以直接参与数学运算
integer ++ ;
System.out.println(num * integer);
}
}
结果:
110
自动装箱的好处是可以实现Object接收基本数据类型的操作,例如:
public class Demo {
public static void main(String[] args) {
// 自动装箱(double自动装箱为Double,再向上转型为Object)
Object obj = 16.6;
double num = (Double) obj;
System.out.println(num);
}
}
结果:
16.6
四、包装类如何判断相等
观察以下代码及结果:
public class Demo {
public static void main(String[] args) {
Integer x = 10;
Integer y = 10;
System.out.println(x == y); // true
}
}
public class Demo {
public static void main(String[] args) {
Integer x = 127;
Integer y = 127;
System.out.println(x == y); // true
}
}
public class Demo {
public static void main(String[] args) {
Integer x = 128;
Integer y = 128;
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
}
}
包装类判等时,若使用“==”来判断,在超过范围时就会出现false
因此以后包装类的判等都要用equals()完成。
Integer类取值和 int 类型取值一致,取值范围是从-2147483648 至 2147483647(-231至 231-1) ,包括-2147483648 和 2147483647。
但是对于Integer类java为了提高效率,初始化了-128--127之间的整数对象,因此Integer类取值-128--127的时候效率最高。
补充一:Integer类型包装类
Integer类型后面赋值范围在-128---127之间
在自动装箱时对于值从–128~127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象。而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个Integer对象。