在Java语言中,八大基本数据类型都有对应的包装类,那么什么是包装类呢?我们都知道,Java是一种面向对象的编程语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用过程中有很多不便的地方,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类代表,这样和八个基本数据类型对应的类称为包装类,有些地方也翻译成外覆类和数据类型类,当然叫什么我们不用太关注。
包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表:
包装类对应表
byte
| Byte
|
boolean
| Boolean
|
short
| Short
|
char
| Character
|
int
| Integer
|
long
| Long
|
float
| Float
|
double
| Double
|
在这八个类里,除了Integer和Character之外,其他六个类的名称和基本数据类型一致,只是第一个字母大写而已。
对于包装类来说,主要用途在以下两个方面:
(1)包含每种基本类型的相关属性,如最大值、最小值等,以及相关的操作方法。
(2)作为和基本数据类型相对应的类类型存在,方便设计到对象的操作,例如Map,List这些集合类里,像int,double这样的基本数据类型是放不进去的。
八个包装类的使用比较类似,下面就以最常见的int基本数据类型和Integer类作为例子介绍实际包装类的使用。
1.实现int和Integer类之间的相互转换
int n=10;
Integer in=new Integer(100);
//将int转换为Integer
Integer in1=new Integer(n);
//将Integer转换为int
int n1=in.intValue();
2.Integer类的一些常用方法
在Integer类中包含了一些对于int操作相关的方法,都是比较常用的方法:
(1)parseInt()方法
public static int parseInt(Stirng s);
该方法的作用是将数字字符串转换为int数值。使用范例如下:
String s="123";
int n =Integer.parseInt(s);
此时变量n的值就是123。如果字符串里不全为数字的话,程序执行会产生异常。
另一个parseInt()方法:
public static int parseInt(String s,int radix);
则字符串按照radix进制转换为int,使用示例如下:
//2进制,“110”对应的n1是6
int n1=Integer.parseInt("110",2);
//8进制,“110”对应的n2是71
int n2=Integer.parseInt("110",8);
//10进制,“110”对应的n3是110
int n3=Integer.parseInt("110",10);
(2)toString()方法
public static String toString(int i);
该方法的作用是将int类型转换成String类型。使用范例如下:
//s的值是String类型的"1"
String s=Integer.toString(1);
另外一个toString()方法
public static String toString(int i, int radix)
则将int类型按照radix进制转换字符串,使用示例如下:
//2进制,6对应的s1是“110”
String s1=Integer.toString(6,2);
//8进制,72对应的s2是“110”
String s2=Integer.toString(72,8);
//10进制,110对应的s3是“110”
String s3=Integer.toString(110,10);
其实,自从JDK1.5版本以后,就引入了自动拆装箱的语法,也就是基本数据类型与对应的包装类进行转换的时候,系统将自动进行,这将大大的方便了我们的编程:
//int类型自动转换成Integer类型
int n=10;
Integer in=n;
//Integer类型自动转换成int类型
Integer in1=20;
int n=in1;
关于Integer,还有一个不得不说的特性,我们知道Integer是类,我们都知道,当类的值相等时(如String类),两个实例对象的地址是不同的,例如:
//会输出false,即s1和s2不相等
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
但是当Integer的值处于某一范围内时,当值相等时,两个Integer对象的地址是相等的,与String类不同。如下所示
//会输出true,即in1和in2相等
Integer in1=1;
Integer in2=1;
System.out.println(in1==in2);
原来当Integer通过自动装箱语法生成对象时,若int的值在[-128,127]之间,会有一个缓冲池存储了这256个值,Integer对象直接指向缓冲池,所以两个Integer的对象地址值会相等。但是,当没有通过自动装箱语法,而是用new关键字生成的Integer对象,就不会指向缓冲池里的值,也就不会地址相等,如下:
//会输出false,即in1和in2不相等
Integer in1=new Integer(1);
Integer in2=new Integer(1);
System.out.println(in1==in2);
关于这个,有兴趣的朋友可以去深入了解,不做赘述。
其他的包装类的用法参照Integer类。