一、什么是包装类
Java中的8中基本类型并不支持面向对象机制,没有成员变量,方法可以调用。Java为了这一中类型引入了包装类,即把基本数据类型当成类来处理。
二、基本数据类型与包装类对应关系
byte
|
Byte
|
short
|
short
|
int
|
Integer
|
long
|
Long
|
char
|
Character
|
float
|
Float
|
double |
Double
|
boolean
|
Boolean
|
三、自动装箱与自动拆箱
自动装箱就是可以直接把基本数据类型变量直接赋值给包装类变量。
自动拆箱就是可以直接把包装类变量直接赋值给基本数据类型变量。
例子:
使用自动拆箱装箱
Integer a = 1;//自动装箱
int b = a; //自动拆箱
没有使用自动拆箱装箱
Integer a = new Integer(1);
int b = a.intValue();
使用自动装箱拆箱可以很方便的对基本类型和包装类类型进行转换。
四、包装类常用的静态方法
(一)字符串转换成基本类型
Xxx.parseXxx(String s) 第一个Xxx代表包装类(Char 除外)
第二个Xxx代表基本类型
例子:
String intStr = "123";
int a = Integer.parseInt(intStr);//a = 123
String floatStr = "45.6f"//f代表float型
float b = Float.parseFloat(floatStr);//b = 45.6
(二)基本类型转换成字符串
String.valueOf(xxx); //xxx为数值
例子:
String intStr = String.valueOf(78);//inStr = "78";
String floatStr = String.valueOf(45.6f);//floatStr = "45.6" 没有f
五、包装类的比较
(一)包装类与基本数据类型的比较
包装类型可以与基本类型直接比较.
例子:
Integer a = 10;
System.out.println("a是否大于6:" + (a > 10));//输出 a是否大于6:true
(二)包装类与包装类的比较
因为包装类是引用类型,如果两个包装类变量直接比较,两个包装类变量所指向的位置相同,
结果才会true;
情况一、两个包装类变量不全使用自动装箱
例如:
Integer a = 10;
Integer b = new Integer(10);
System.out.println(""+(a == b));//结果为false,因为a和b指向对象的位置并不相同。
情况二、两个包装类变量全使用自动装箱
例如:
Integer a = 10;
Integer b = 10;
System.out.println(""+(a==b));//结果为true
Integer c = 128;
Integer d = 128;
System.out.println(""+(c == d));//结果为false
那么问题来了,为什么两个的值为10就相同,为什么值为128的时候就不相同呢?
系统会把-128~127之间的每一个数自动装箱成一个Integer实例,放进一个cache缓存当中,
每当我们创建-128~127之间的Integer实例的时候,系统就会直接把实例指向cache中对应的实例,
所以当我们创建的Integer实例的值在-128~127之间的时候,只要他们的值相同,都会指向同一个
位置,他们的指向相同,所以直接比较的结构就相同。
如果创建的Integer实例的数值不在这个范围里面,系统每次遇到要创建实例的时候,都会新创建一个
实例,所以就算实例的数值相同,他们的指向也不相同,所以直接比较的结果肯定不相同。
在比较包装类实例的时候,通常会使用以下方法:
1、实例.toCompare(另一个实例); 数值相同为0 大于为1 小于为-1
2、包装类.compare(包装类实例1,包装类实例2);数值相同为0 大于为1 小于为-1