【Java专题】包装类型

每个基础数据类型都有一个对应的包装类型,包装类型的本质是一个内置的对象。

类型对应关系

基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

Java中的包装类(Wrapper Classes)对基本数据类型进行了封装,使其也具有了对象的特性,可以调用方法和进行类型转换等操作。

区别

  • 存储方式:基本类型直接存储值,而包装类型存储的是对应基本类型值的对象
  • 空值处理:基本类型没有空值(null)的概念,而包装类型可以将null作为有效值来表示缺失或无效值
  • 默认值:基本类型有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而包装类型的默认值是null
  • 对象操作:基本类型不能直接调用方法,而包装类型可以调用对应的方法,例如Integer类的intValue()方法可以获取保存在Integer对象中的值
  • 自动装箱/拆箱:基本类型和包装类型之间可以进行自动装箱和拆箱的转换。
  • 泛型支持:泛型只能使用引用类型,不能直接使用基本类型。因此,当需要在泛型中使用基本类型时,需要使用对应的包装类型
  • 比较方式:基本类型使用==进行比较时,比较的是值是否相等。而包装类型使用==进行比较时,比较的是引用是否指向同一个对象,而不是比较值是否相等。若要比较包装类型的值是否相等,需要使用equals()方法

自动装箱是指将基本类型的值自动转换为对应的包装类型对象,如int 转Integer,Integer integer = 100,底层调用了Interger.valueOf(100)方法
自动拆箱则是将包装类型对象自动转换为基本类型的值

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class TestWrapperClass {
public static void main(String[] args) {
int i1 = Integer.parseInt("123");
System.out.println(i1); // 123
Integer i2 = new Integer(123);
System.out.println(i2); // 123
int i3 = new Integer(123);
System.out.println(i3); // 123
int i4 = new Integer("123");
System.out.println(i4); // 123

System.out.println(i2.equals(i1)); // true
System.out.println(i3 == i4); // true

boolean b1 = Boolean.valueOf("true");
System.out.println(b1); // true
System.out.println(Boolean.TRUE); // true
}
}