3、包装类

包装类(封装类)

Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。

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

其中,ByteShortIntegerLongFloatDouble的父类都是java.lang.Number

装箱和拆箱

int val = 10;
// 装箱
Integer integerValue = Integer.valueOf(10);
// 拆箱
int intValue = integerValue.intValue();

自动装箱与自动拆箱

jdk5.0新加入特性,引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行装箱和拆箱

int val = 10;
// 自动装箱
Integer integerValue = val;
// 自动拆箱
int intValue = integerValue;

包装类的缓存机制

在java中,除了DoubleFloat之外,剩下的包装类都有缓存,也就是说,例如Integer在装箱时,如果数据的范围是-128 ~ 127,那么在内存中使用的是同一个对象

// 自动装箱使用缓存
Integer a = 125;
Integer b = 125;
System.out.println(a == b); // true

// 手动装箱使用缓存
Integer c = Integer.valueOf(125);
Integer d = Integer.valueOf(125);
System.out.println(c == d); // true

// new对象,不使用缓存
Integer e = new Integer(125);
Integer f = new Integer(125);
System.out.println(e == f); // false

缓存范围

Booleantruefalse Byte-128 ~ 127 Character0 ~ 127 Short-128 ~ 127 Integer-128 ~ 127 Long-128 ~ 127