包装类
- 因为实际开发过程中经常需要操作对象,而不是普通数据类型的情形
- 把8种基本类型包装成面向对象的类
- 每个包装类的对象封装一个基本的数据类型,里面提供一些方法
- 注意:基本数据类型的初始值是0,0.0,falese.... 包装类的初始值是null
- 每一个包装类都是Number的子类(除了boolean和Character)
- 基本类型和包装类可以相互转换:
- 基本类型 -> 对应的包装类 装箱 (构造方法)
- 包装类 -> 基本类型 拆箱 XXXValue()方法
// int 和 Integer相互转换
publicstaticvoidmain(String[] args) {
intm=500;
Integerobj=newInteger(m); // 手动装箱
intn=obj.intValue(); // 手动拆箱
System.out.println("n = "+n);
Integerobj1=newInteger(500);
System.out.println("obj 等价于 obj1?"+obj.equals(obj1));
}
Integern=newInteger("123"); // 输入纯数字组成的字符串时可以转换成对应的类型
// 输入带字符的String时会报错
Booleanb1=newBoolean("TRue"); //True 在忽略大小写的情况下
Booleanb2=newBoolean("true123"); // false 但不会报错
- 自动装箱和自动拆箱
- JDK1.5之前只能手动
- JDK1.5之后可以自动装箱
publicstaticvoidmain(String[] args) {
intm=500;
Integerobj=m; // 自动装箱
intn=obj; // 自动拆箱
System.out.println("n = "+n);
Integerobj1=500;
System.out.println("obj 等价于 obj1?"+obj.equals(obj1));
}
- 这些操作其实都是编译器根据你所编写的语法,决定是否进行操作的
基本数据类型+包装类和String的相互转化
// 将字符串转换成整数 paseInt(String s, int radix);
// s为要转换的字符串,radix为进制(可选)
publicvoidtest(){
Stringstr1="123";
intnum2=Integer.parseInt(str1);
// 调用对应包装类的parseXXX方法
System.out.println(num2);
}
// 将整数转换成字符串 toString()方法
// 或者直接在整数后面加空字符串即可
// 或调用String的VauleOf()
publicstaticvoidmain(String[] args){
intm=500;
Strings=Integer.toString(m); // 方式三:调用包装类的toString()方法将包装类转换成String
Strings2=m+""; // 方式一:连接运算 + ” “
System.out.println("s= "+s);
Doubled1=newDouble(12.4);
Doubled2=10.1;
Strings3=String.valueof(d1);
Strings4=String.valueof(d2); // 方式二:调用String的VauleOf() 包装类和基本数据类型都适用
}
面试题
编译的时候要求两边的数据类型一致,所以统一成Double类型
Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[]
保存了从-128 ~ 127之间的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在-128 ~ 127范围内时,可以直接使用数组中的元素,不用再去New了,目的是为了提高效率