对象包装器(wrapper)
什么是对象包装器
- 将基本数据类型转换为对象的机制 使得其具有对象的特性
比如int 是一个基本数据类型 但是其不是对象 要想成为一个对象就要使用类型类型对象包装器
为什么要使用对象包装器
- 使得基本的数据类型有对象的特性 可以调用对象的方法
比如要想声明一个整形数组列表 那么该列表中的数据类型应是整形
可是 列表不接受基本的数据类型 只能接受对象为参数
ArrayList<int>
有语法错误 而ArrayList<Integer>
则没有问题
因为int是 基本数据类型 而Integer是包装器类(是一个对象)
- 使用对象包装器可以使得代码更加灵活、方便、易读
- 对象包装器还提供了一些方便的方法,例如将字符串转换为基本数据类型,或者将基本数据类型转换为字符
既然基本类型通过类型包装器的操作之变成了对象 所以 也就从基本数据类型变成了引用数据类型
对象包装器中所提供的方法
valueOf()方法:将字符串转换为对应的基本数据类型或对象包装器类型的值。
parseInt()方法:将字符串转换为int类型的值。
toString()方法:将对象转换为字符串。
equals()方法:比较两个对象是否相等。
compareTo()方法:比较两个对象的大小关系。
intValue()方法:将对象转换为int类型的值。
doubleValue()方法:将对象转换为double类型的值。
booleanValue()方法:将对象转换为boolean类型的值。
基本数据类型及其包装类
基本数据类型 | 包装类(引用型数据类型) |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
大部分都是将其基本数据类型的 首字母大写 就是其对应的包装类
只有int 和char类型的包装类需要特别注意
Integer(整形) Character(字符)
- 注意
转换成包装类之后 类型会发生转变 即 基本数据类型---->引用数据类型
包装器的特点
-
包装器不可变
构造好了包装器就不允许整个包装在其中的值
-
包装器不能派生子类
包装类是用final修饰的
包装器的继承关系
- 包装类继承自超类Object 所以可以直接调用其方法 不用导入包
装箱和拆箱
装箱(boxing)
-
把基本数据类型通过对象包装器转为包装类
基本数据类型 int ----包装器—> Integer(包装类)
进行装箱操使得类型发生转换:基本数据类型------>引用数据类型
//装箱 基本数据类型转------>引用数据类型 int---->Integer
int num=10;//定义一个基本数据类型
Integer integer;//声明一个int对应的包类型
integer=Integer.valueOf(num);//num转换成包类型(Integer) 并赋值给integer
拆箱
-
把包装类转换为基本数据类型
装箱的反向操作 Inerger(包装类)----拆箱–>int(基本数据类型)
同理,进行拆箱操作也会使得类型发生转换: 引用数据类型----->引用数据类型
//拆箱
// 引用数据类型------>基本数据类型 Integer---->int
//将字符串强转为整形 前提输入的是数字字符
Integer integer=10;//引用数据类型
int num=integer.intValue();//将包装类转换成int类类型的值
- 装箱和拆箱
代码示例
public class _Integer {
public static void main(String[] args) {
//可能发生转换失败的 问题 所以得进捕获
try {
//装箱
// 基本数据类型转------>引用数据类型 int---->Integer
int num=10;//基本数据类型
Integer integer =Integer.valueOf(num);
System.out.println("装箱后的值:"+integer);
//拆箱
// 引用数据类型------>基本数据类型 Integer---->int
//将字符串强转为整形 前提输入的是数字字符
Integer integer2=10;//基本数据类型
int num2=integer2.intValue();
System.out.println("拆箱之后的值:"+num2);
//parseInt()将字符串转换成 int类型的值
// 前提是字符串由数字组成
String strNumber="123456";
int Number=Integer.parseInt(strNumber);//将字符串强转为数字
System.out.println("字符转换成整形数字:"+Number);
//toString()将对象转换成字符串
int number=123;
String str1=Integer.toString(number);
System.out.println("转换成字符串"+str1);
//还可以转换成别的 intValue() doubleValue() booleanValue()
//equals() 比较两个对象的大小是否相等
Integer a=1;
Integer b=2;
System.out.println("a和b是否相等?:"+a.equals(b));
//compareTo()比较两个对象的大小
Integer x=11;
Integer y=2;
System.out.println("比较x和y的大小"+x.compareTo(y));
//x=y 返回0
//x>y 返回1
//x<y f返回-1
} catch (NumberFormatException e) {
System.out.println("发生异常"+e);
}
}
}