Java设计中一个核心的原则,即万物皆对象,也就是说一切要求用对象的形式描述,但是基本数据类型不是对象。 那么该如何解决此问题呢? 可以把基本数据类型包装成一个对象,以面向对象的思想去使用这些类型。 包装类有什么作用? 采用基本数据类型包装的形式描述,让功能变得更加健壮,例如: Integer默认不是int的 0 而是 null ,那么比起基本数据类型,包装类对象它就多了一个状态。
包装类列表:
基本类型 | 包装类 | ||||
boolean | Boolean | ||||
char | Character | ||||
byte | Byte | ||||
short | Short | ||||
int | Integer | ||||
long | Long | ||||
float | Float | ||||
double | Double |
装箱与拆箱
装箱:将值类型装换成引用类型的过程。通过调用包装器类的 valueOf 方法实现。
拆箱:将引用类型转换成值类型的过程。通过调用包装器类的 xxxValue 方法实现,xxx代表对应的基本数据类型(int,short,long,double,byte,char,float,boolean)。
// 装箱
Integer i1 = new Integer(1);
Integer i2 = Integer.valueOf(2);
// 拆箱
int i3 = ir1.intValue();
自动拆装箱。
// 自动装箱
Integer i1 = 1;
// 自动拆箱
int i2 = i1;
基本数据类型与字符串的相互转换
1.基本数据类型转换到字符串类型
① 使用包装类的 toString() 方法
int a = 20;
String s1 = Integer.toString(a);
double d = 20.2;
String s2 = Double.toString(d);
② 使用String类的 valueOf() 方法
int a = 20;
String s1 = String.valueOf(a);
double d = 20.2;
String s2 = String.valueOf(d);
③ 通过加一个空字符
int a = 20;
String s1 = a+"";
double d = 20.2;
String s2 = d+"";
2.字符串类型转换到基本数据类型
①调用包装类的 parseXxx 静态方法,xxx代表对应的基本数据类型(int,short,long,double,byte,char,float,boolean)。
String s1 = "20";
int a = Integer.parseInt(s1);
String s2 = "20.2";
double d = Double.parseDouble(s2);
需注意字符串转成基本数据类型时字符串内容必须是基本数据类型的字面值,否则编译虽然能通过,但运行时出现NumberFormatException
例如:
public class Main {
public static void main(String[] args) {
String s1 = "20a";
int a = Integer.parseInt(s1);
System.out.println(a);
}
}
输出结果:
②调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
String s1 = "20";
int a = Integer.valueOf(s1);
String s2 = "20.2";
double d = Double.valueOf(s2);
③用字符串构造基本类型的封装对象,再调用封装对象的xxxValue方法
String s1 = "20";
Integer a = new Integer(s1);
int a2 = a.intValue();
String s2 = "20.2";
Double d = new Double(s2);
double d2 = d.doubleValue();