包装类
1.所有基本数据类型的包装类
在java中,数据类型分为:基本数据类型和引用数据类型。而包装类就是对基本数据类型进行包装,使其具有引用数据类型的特征,并添加一些方法可供使用。
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
2.数据的装箱与拆箱
装箱:将基本数据类型转为包装类型
//1.用包装类的构造方法
Integer i = new Integer(10);
//2.使用valueOf方法
Integer i2 = Integer.valueOf(10);
拆箱:就是将包装类型转为基本数据类型
//1.intValue
int n = i.intValue();
自动装箱与自动拆箱
JDK1.4后,装箱和拆箱是可以自动完成的
//自动装箱
Integer i3 = 10;
//自动拆箱
int n2 = i3;
3.基本数据类型与字符串之间的转换
基本数据类型转为字符串类型
//1.此方法可以实现,但是不推荐使用(开辟新的空间)
String s = 10 + "";
//2.使用String类的valueOf方法
String s1 = String.valueOf(100);//"100"
String s2 = String.valueOf(false);//"false"
//3. Object类的toString方法
String s3 = Integer.valueOf(100).toString();
字符串类型转为基本数据类型
//1.包装类的parseXXX 方法
int i = Integer.parseInt("123");
System.out.println(i + 1);//输出124而不是1231说明转换成功
//2.包装类的valueOf方法
int i2 = Integer.valueOf("123");//这个隐藏实现了自动拆箱
System.out.println(i2 + 1);//输出124而不是1231说明转换成功
注意事项:
- 字符串如果无法转型为想要的类型会抛出异常
//无法转为int类型,抛出了NumberFormatException异常
int i = Integer.parseInt("123a");
System.out.println(i);
- 对于boolean的转型:只有true字符串能转为true,其他都为false
//字符串转为false
boolean b = Boolean.parseBoolean("123");
System.out.println(b);
//字符串true转为true,跟大小写无关,TrUe也能转换成功
boolean b2 = Boolean.parseBoolean("true");
System.out.println(b2);
4.案例
Integer a1 = Integer.valueOf(10);
Integer a2 = Integer.valueOf(10);
System.out.println(a1 == a2);//结果为true
Integer a3 = Integer.valueOf(200);
Integer a4 = Integer.valueOf(200);
System.out.println(a3 == a4);//结果为false
为什么结果会不同呢?
按住Ctrl点击valueOf看源码,可以知道,系统对-128到127做了特殊处理,将他们的Integer对象存在了一个数组中,每次都去取对应的Integer对象,所以每次取到的10的包装类型都是同一个,所以a1 == a2是true;而超过127的数,是没有做处理的,也就是做直接返回new Integer(),每次都产生一个新的对象,他们自然不是同一个对象了。所以a3 == a4是false