包装类的产生就是为了解决基本数据类型没有属性,方法,不能对象化交互的问题
基本数据类型和包装类之间的对应关系如下:
基本类型——包装类
byte——Byte
short——Short
int——Integer
long——Long
float——Floatdouble——Double
char——Character
booleam——Boolean
1. 包装类与基本数据类型装换的装箱和拆箱
package wrap;public class WrapTestOne { public static void main(String[] args) { //装箱:把基本数据类型转换成包装类 //1. 自动装箱 int t1 = 2; Integer t2 = t1; //把t1直接赋值给t2 //2. 手动装箱 Integer t3 = new Integer(t1); //测试 System.out.println("int类型变量t1的值:"+t1); System.out.println("Integer类型对象t2的值:"+t2); System.out.println("Integer类型对象t3的值:"+t3); //拆箱:把包装类转换成基本数据类型 //1. 自动拆箱 int t4 = t2; //2. 手动拆箱 int t5 = t2.intValue(); //把Integer对象t2转换成int类型的值 System.out.println("Integer对象t2的值:"+t2); System.out.println("自动拆箱后,int类型变量t4的值:"+t4); System.out.println("手动拆箱后,int类型变量t5的值:"+t5); double t6 = t2.doubleValue(); //把t2转换成double了类型的值 System.out.println(t6); }}
2. 基本数据类型和字符串之间的转换
package wrap;public class WrapTestTwo { public static void main(String[] args) { //基本数据类型转换为字符串 int t1 = 2; String t2 = Integer.toString(t1); //使用toString方法,把int类型转换为String //测试 System.out.println("int类型转换为String类型对象t2="+t2); //字符串转换为基本数据类型 int t3 = Integer.parseInt(t2); //使用Integer的parseInt方法,把字符串转换成int类型 System.out.println("String类型转换为int类型变量t3= "+t3); int t4 = Integer.valueOf(t2); //把String转换成Integer类型后,自动拆箱操作变成int类型 System.out.println(t4); }}
3. 包装类的默认值
String name; //包装类和基本类型默认值都是null int mouth; //默认值为0 Integer mouth1; //默认值为null double weight; //默认值为0.0 Double weight1; //默认值为null
4. 包装类的比较
package wrap;public class WrapperTest { public static void main(String[] args) { Integer one = new Integer(100); Integer two = new Integer(100); System.out.println(one == two); //false:等号两边放对象名,比较的是引用对象指向的不同的内存空间 Integer three = 100; //自动装箱 System.out.println(three == 100); //比较时自动拆箱 100==100 true// Integer foure = 100; ====等于(-128————127之间隐式调用)===== Integer foure = Integer.valueOf(100); Integer foure = Integer.valueOf(100); System.out.println(three == foure); //隐式调用,因此指向的是内存的同一块空间 Integer five = 200; System.out.println(five == 200); Integer six = 200; System.out.println(five == six); //false 超过隐式调用的区间了 }}
注意:float和double类型不具备常量池概念,也就是int中的隐式调用