封装与拆箱
696字约2分钟
2025-09-23
八大Wrapper类
基本数据类型对应的包装类
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类所实现的接口以及继承的父类
包装类 | 实现接口 | 父类 |
---|---|---|
Boolean | Serializable ,Comparable | Object |
Character | Serializable ,Comparable | Object |
Byte | Comparable | Number |
Short | Comparable | Number |
Integer | Comparable | Number |
Long | Comparable | Number |
Float | Comparable | Number |
Double | Comparable | Number |
Number | Serializable | Object |
实现 Serializable
接口就表示该类可以串行化(也就是可以在网络上传输)
实现 Comparable
接口就表示该类可以进行比较
装箱和拆箱
- 装箱:int --> Integer
- 拆箱:Integer --> int
手动装箱和拆箱(JDK5之前)
int a = 100;
// 手动装箱(两种方法)
Integer i1 = new Integer(a);
Integer i2 = Integer.valueOf(a);
// 手动拆箱
int i = i1.intValue();
自动装箱和拆箱(JDK5之后)
int b = 200;
// 自动装箱
Integer x1 = b;
// 自动拆箱
int x = x1;
自动装箱底层调用的就是 valueOf
方法
其它类型的数据装箱和拆箱步骤都是差不多的
valueOf()
的主要作用是将其他类型的数据转换为当前类的对象,通常用于基本类型与包装类之间的转换,或字符串与其他类型的转换
类型转换
Integer
转String
// 包装类 Integer --> String
Integer i = 1;
/*
* 下面这几行代码是将i变为新的值并赋值String,但并不会影响到Integer
* */
String a1 = i + ""; // 方法一
String a2 = i.toString(); // 方法二
String a3 = String.valueOf(i); // 方法三
String
转Integer
// String --> 包装类 Integer
String b1 = "12345";
Integer y1 = Integer.parseInt(b1);
Integer y2 = new Integer(b1);
Integer
类和Character
类的常用方法
// 返回最小值
System.out.println(Integer.MIN_VALUE);
// 返回最大值
System.out.println(Integer.MAX_VALUE);
// 判断是不是数字
System.out.println(Character.isDigit('a'));
// 判断是不是字母
System.out.println(Character.isLetter('a'));
// 判断是不是大写
System.out.println(Character.isUpperCase('a'));
// 判断是不是小写
System.out.println(Character.isLowerCase('a'));
// 判断是不是空格
System.out.println(Character.isWhitespace('a'));
// 转换成大写
System.out.println(Character.toUpperCase('a'));
// 转换成小写
System.out.println(Character.toLowerCase('a'));
细节
/*
自动装箱底层代码
根据代码,当传进来的值在 -128 ~ 127 之间时,是直接返回传进来的值,不会创建新对象
但传进来的值一但小于 -128 或者大于 127时,也是直接返回传进来的值,但是要通过创建的新对象返回
low 为 -128
high 为 127
public static Integer valueOf(int i) {
if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
return new Integer(i);
}
*/
// 自动装箱,就是底层自动给你装箱,底层也是用到了valueOf()来装箱
// 根据底层代码可得,这里为true
Integer x1 = 1;
Integer x2 = 1;
System.out.println(x1 == x2); //true
// 根据底层代码可得,这里为false
Integer y1 = 128;
Integer y2 = 128;
System.out.println(y1 == y2); //false