一、为什么需要包装类

包装类的主要功能是针对基本数据类型的对象转换而实现的。若想把基本数据类型以类或者对象的形式进行处理,就需要转换成包装类。

二、有哪些包装类

基本数据类型有八种,对应的包装类也有八种,对应关系如下:

JAVA包装类、自动装箱、拆箱_自动装箱

概括的说,包装类分为两种:

  1. 对象型包装类(Object直接子类):Boolean、Character
  2. 数值型包装类(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之间

JAVA包装类、自动装箱、拆箱_基本数据类型_02

在自动装箱时对于值从–128~127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象。而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个Integer对象。