13.1 基本数据类型的包装类
Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类。
注意:每个基本数据类型都有一个与之匹配的包装类。
13.1.1 基本数据类型与其包装类
包装类的层次结构:
13.1.2 数据的装箱和拆箱
13.1.2.1 装箱和拆箱
装箱:把基本数据类型包装为对应的包装类对象
Integer i1 = new Integer(10); // 利用构造方法
Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法
拆箱:把包装类对象转换为对应的基本数据类型。
- int i3= i1.intValue(); //返回包装类对象i1对应的基本数据
13.1.2.2 自动装箱和自动拆箱
前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。
自动装箱:可以直接把一个基本数据类型赋值给包装类
例如: Double d = 3.3; //自动装箱操作
//内部实现自动装箱代码:Double d= Double.valueOf(3.3); 注意valueOf方法的源码,
自动拆箱:可以直接把一个包装类对象,赋值给基本类型
例如:int a = new Integer(3); //自动拆箱。
//内部实现自动拆箱代码:int a= new Integer(3).intValue();
自动装箱和自动拆箱,简化了对包装类的操作。
//神坑笔记:
// 1.第一种情况:a=-128到a=127范围内 b=-128到b=127范围内
int a = 123;
int b = 123;
boolean b1 = a == b;
System.out.println("情况1=" + b1); //true
//最要注意的地方
Integer x = a;
Integer y = b;
// Integer x = Integer.valueOf(a);// 自动装箱时内部实现的代码,当值在-128~127范围内会缓存,否则会new
// Integer y = Integer.valueOf(b);
boolean b2 = x == y;
System.out.println("情况2=" + b2); //true 在范围内,直接缓存,不会new
Integer i = new Integer(a);
Integer j = new Integer(b);
boolean b3 = i == j;
System.out.println("情况3=" + b3); //false
//2.第二种情况:a<-128或a>127范围内 b<-128或b>127范围内
int a = 321;
int b = 321;
boolean b1 = a == b;
System.out.println("情况1=" + b1); //true
//最要注意的地方
Integer x = a;
Integer y = b;
// Integer x = Integer.valueOf(a);// 自动装箱时内部实现的代码,当值在-128~127范围内会缓存,否则会new
// Integer y = Integer.valueOf(b);
boolean b2 = x == y;
System.out.println("情况2=" + b2); //false 不在范围内,不缓存,会new
Integer i = new Integer(a);
Integer j = new Integer(b);
boolean b3 = i == j;
System.out.println("情况3=" + b3); //false
//总结:1.针对int型的三种情况是:
a=-128到a=127范围内 b=-128到b=127范围内: true true false
a<-128或a>127范围内 b<-128或b>127范围内: true false false
2.针对byte型的三种情况是:
3.针对char型的三种情况是:
4.针对short型的三种情况是:
5.针对double型的三种情况是:
6.针对float型的三种情况是:
7.针对long型的三种情况是:
8.针对boolean型的三种情况是:
@TODO