Java倡导一切皆对象,但是Java中有8中基本数据类型不支持面向对象的机制,因此Java提供了包装类的概念,将基本数据类型变成一个类的形式。
1、包装类介绍
基本数据类型与包装类的对应关系:
基本数据类型 | 包装类 |
---|---|
int | Integer |
short | Short |
byte | Byte |
long | Long |
float | Float |
double | Double |
char | Chracter |
boolean | Boolean |
其中Character和Boolean类是Object类的直接子类,其他的都是Number类。Number类是一个抽象数据类型,主要将包装类的内容转化为基本数据类型。每个包装类都通过对应的**Value()函数获取基本数据类型值。例如Interger.intValue()。
2、自动装箱与自动拆箱
自动装箱:将一个基本数据类型变为包装类。
int x = 30;
Interger i = new Integer(x);//一种装箱
Interger i = x; //另一种装箱
自动拆箱:将一个包装类变为基本数据类型。
Integer i = 30;
int x = i.intValue();//一种拆箱
int x = i; //另一种拆箱
3、包装类的应用
1、基本数据类型与字符串之间的相互转换
字符串转换为基本数据类型:
① 通过包装类提供的parseXxx(String s)方法进行转换(Character类没有该方法,其他都有)。例如Interger.parseInt(“3435”);
② 通过包装类的构造方法Xxx(String s)。例如new Integer(“443”);
基本数据类型转换为字符串:
通过String类提供的多个重载valueOf()函数进行转换。例如String.valueOf(345);
2、包装类内容的相互比较
① 包装类与基本数据类型比较时会自动拆箱为基本数据类型,然后再进行比较
② 包装类与包装类的比较就比较复杂,只有当两个包装类的引用指向同一个对象时才会返回true。
例如:
new Integer(2) == new Integer(2);//返回false
以上程序返回false,因为new关键字都是重新建立一个新的对象。
以下另外一种装箱操作时,情况就比较复杂,例如:
Integer a = 2;
Integer b = 2;
System.out.println(a == b); //输出true
Integer c = 128;
Integer d = 128;
System.out.println(c == d); //输出false
这是因为Java在用这种方式进行装箱时,建立了一个[-128,127]的数组作为缓存,当装箱数字在这个范围时,实际上都是直接引用数组里的元素,而这个范围以外的数字都会重新创建一个Integer实例。