基本数据类型的包装类
Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类。
注意:每个基本数据类型都有一个与之匹配的包装类。
1 基本数据类型与其包装类
包装类的层次结构:
2 数据的装箱和拆箱
2.1 装箱和拆箱
装箱:把基本数据类型包装为对应的包装类对象
Integer i1 = new Integer(10); // 利用构造方法
Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法
拆箱:把包装类对象转换为对应的基本数据类型。
int i3= i1.intValue(); //返回包装类对象i1对应的基本数据
2.2 自动装箱和自动拆箱
前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。
1. 自动装箱:可以直接把一个基本数据类型赋值给包装类
例如: Double d = 3.3; //自动装箱操作
2. 自动拆箱:可以直接把一个包装类对象,赋值给基本类型
Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类。
注意:每个基本数据类型都有一个与之匹配的包装类。
1 基本数据类型与其包装类
包装类的层次结构:
2 数据的装箱和拆箱
2.1 装箱和拆箱
装箱:把基本数据类型包装为对应的包装类对象
Integer i1 = new Integer(10); // 利用构造方法
Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法
拆箱:把包装类对象转换为对应的基本数据类型。
int i3= i1.intValue(); //返回包装类对象i1对应的基本数据
2.2 自动装箱和自动拆箱
前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。
1. 自动装箱:可以直接把一个基本数据类型赋值给包装类
例如: Double d = 3.3; //自动装箱操作
2. 自动拆箱:可以直接把一个包装类对象,赋值给基本类型
例如:int a = new Integer(3); //自动拆箱。
int a1 = 18;
Integer i = a1;// 自动装箱 等价于:{int a2 = Integer.valueOf(a1);}
int a2 = i;// 自动拆箱 等价于:{int a2 = i.intValue();}
自动装箱的特点
Integer a = new Integer(666);
Integer b = new Integer(666);
System.out.println(a == b);// false
Integer a1 = new Integer(1);
Integer b1 = new Integer(1);
System.out.println(a1 == b1);// false
Integer a2 = 666;// new Integer(666);
Integer b2 = 666;// new Integer(666);
System.out.println(a2 == b2);// false
Integer a3 = 127;// 没有new
Integer b3 = 127;// 没有new
System.out.println(a3 == b3);// true 内部存储了256个数字,从-128到127,如果输入的数在这个范围就不会new,否则就会new
Integer a4 = Integer.valueOf(126);// 没有new
Integer b4 = Integer.valueOf(126);// 没有new
System.out.println(a4 == b4);// true
Boolean bool11 = new Boolean(true);
Boolean bool12 = new Boolean(true);
System.out.println(bool11 == bool12);// false
Boolean bool21 = true;
Boolean bool22 = true;
System.out.println(bool21 == bool22);// true
Boolean bool31 = Boolean.valueOf(true);
Boolean bool32 = Boolean.valueOf(true);
System.out.println(bool31 == bool32);// true
自动装箱的特点
Integer a = new Integer(666);
Integer b = new Integer(666);
System.out.println(a == b);// false
Integer a1 = new Integer(1);
Integer b1 = new Integer(1);
System.out.println(a1 == b1);// false
Integer a2 = 666;// new Integer(666);
Integer b2 = 666;// new Integer(666);
System.out.println(a2 == b2);// false
Integer a3 = 127;// 没有new
Integer b3 = 127;// 没有new
System.out.println(a3 == b3);// true 内部存储了256个数字,从-128到127,如果输入的数在这个范围就不会new,否则就会new
Integer a4 = Integer.valueOf(126);// 没有new
Integer b4 = Integer.valueOf(126);// 没有new
System.out.println(a4 == b4);// true
Boolean bool11 = new Boolean(true);
Boolean bool12 = new Boolean(true);
System.out.println(bool11 == bool12);// false
Boolean bool21 = true;
Boolean bool22 = true;
System.out.println(bool21 == bool22);// true
Boolean bool31 = Boolean.valueOf(true);
Boolean bool32 = Boolean.valueOf(true);
System.out.println(bool31 == bool32);// true
2.3 手动装箱 与 手动拆箱
int a = 12;
Integer i = new Integer(a);// 手动装箱的过程
int b = i.intValue();// 手动拆箱的过程
System.out.println(a == i);// 包装类 与 基本数据类型 比较。则包装类 会 自动拆箱