包装类
定义
在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。
1.1 基本数据类型和对应的包装类
包装类是用来服务基本数据类型的
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
1.2 装箱和拆箱
装箱(装包):将一个基本数据类型装起来,它就变成了包装类型
拆箱(拆包): 把一个包装类型拆开,它就变成了基本数据类型
public static void main1(String[] args) {
int i = 5;
Integer Ii = i; //自动装箱
Integer Ij =(Integer)i; //自动装箱
System.out.println(Ij); //5
int j = Ij; //自动拆箱
int l = (int)Ij; //自动拆箱
}
为什么要有包装类?
1.在Java当中,基本类型并不是属于Object的类型
2.泛型并不支持基本类型
3.这是为了在后面学习的(泛型)中可以支持基本类型的使用,而对它们进行的一种打扮,每个基本类型都对应的得有一个包装类型
1.3手动装箱和拆箱
int类型为例
装箱 :Integer.valueOf()
拆箱: intValue()
public static void main(String[] args) {
//手动
//1.装箱 Integer.valueOf()
int i = 32;
//Integer Ii = i; //自动装箱
Integer Ii = Integer.valueOf(i); //手动装箱1
//Integer Ij = new Integer(24); //手动装箱2
//2.拆箱 intValue()
Integer Ij = new Integer(24); //手动装箱2
// int j = Ij; //自动拆箱
int j = Ij.intValue(); //手动拆箱
}
手动装拆箱和自动装拆箱的区别?
1.作用上没有区别,都是装拆箱子;
2.代码也是同一段代码,只是简化了方法的调用。
3.自动比手动少写了一点代码,总体上减轻了代码量,减轻负担。
关于装箱很重要的知识点-范围
大家请看下列的代码告诉我输出的值是多少。
想必大家得出自己的结果之后,会思考为什么仅仅相差一位,结果就会不一样。下面就是我的解释
上述代码我们进行的是装箱操作,装箱的操作是Integer.valueOf() ,这时候我们点进去源码去看,也就是下图.
1.从图中我们能得知Integer
的范围就是 -128——127。
2.图中划红线的位置我们可以明显看出这是个数组
3.随后我们根据范围即可画出数组图,分别观察127和128所在的位置
4.c和d的数值已经超过了数组范围,导致他们两的地址不一样,所以我们c和d的输出结果为false