装箱和拆箱
- 装箱:把基本类型数据转成对应的包装类对象
- 拆箱:把包装类对象转成对应的基本数据类型数据
- 自动装箱:把一个基本类型变量直接赋给对应的包装类变量或 Object 变量
- 在底层依然是手动装箱,使用的是 方法
- 因此,
Object obj = 17;
Object[] arr = {"A", 12, 3.14, true};
-
- 在底层依然是手动拆箱,使用的是
xxxValue()
方法 - 因此,switch 语句也支持 byte, short, char, int 对应的包装类
- 在底层依然是手动拆箱,使用的是
- 可以把基本类型的变量近似地当成对象使用,也可以把包装类的实例近似地当成基本类型的变量使用
- 八大基本数据类型的包装类都都是最终类、不可变类(对应的储存数值的成员变量 value 值使用 private final 修饰)
包装类的常用操作方法
包装类的构造器,用于创建对应的包装类对象(xxx 类型的包装类 Xxx)
- Xxx(xxx value):a. 装箱,如
Integer(int value)
- Xxx(String str):f. 字符串 → 包装类
- Character 类没有此构造器
Boolean(String str)
// 如果 str 不为 null 且在忽略大小写时等于 "true",则创建一个表示 true 值的 Boolean 对象,否则创建一个表示 false 值的 Boolean 对象- 当该字符串不能转换为适当格式时,抛出异常 NumberFormatException
- Xxx(xxx value):a. 装箱,如
-
xxx sum(xxx a, xxx b)
:将两个数相加xxx min(xxx a, xxx b)
:返回两个数的较小值,Math.min
xxx max(xxx a, xxx b)
:返回两个数的较大值,Math.max
int compare(xxx a, xxx b)
:比较两个数值,a 小于、等于或大于 b 则分别返回 -1、0 或 1
- 包装类、基本类型、字符串之间的转换
实例方法 | 方法说明 |
---|---|
xxx xxxValue() | b. 拆箱(Number 类) |
char charValue() | b. 拆箱 |
boolean booleanValue() | b. 拆箱 |
String toString() | e. 包装类 → 字符串 |
boolean equals(Object obj) | g. 判断包装类对象的值是否相等 |
compareTo(T o) | f. 该对象小于、等于或大于指定对象则分别返回 -1、0 或 1 |
c.基本类型 → 字符串:
String String.valueOf(xxx value);
// String 类中的类方法
包装类中的缓存设计(享元模式)
- Byte、Short、Integer、Long:使用 cache 数组默认缓存了 -128~127 之间的整数自动装箱成的包装类对象
- Character:使用 cache 数组默认缓存了 0~127 之间的整数自动装箱成的 Character 类对象
把一个在缓存区间内的整数通过 装箱成包装类对象时,该对象引用 cache 数组的同一个数组元素
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
// 通过 new 创建的包装类对象不是
public Integer(int value) {