java入门-----包装类
含义:基本数据类型对应的类
出现原因:Java为纯面向对象语言(万物皆对象),而八种基本数据类型不能创建对象,破坏了java为纯面向对象语言的特征,所有java又给这八种基本数据类型分别匹配了对应的类;叫包装类/封装类
继承关系:
基本数据类型 | 引用数据类型 |
---|---|
byte | Byte extends Number extends Object |
short | Short extends Number extends Object |
int | Integer extends Number extends Object |
long | Long extends Number extends Object |
float | Float extends Number extends Object |
double | Double extends Number extends Object |
char | Character extends Object |
boolean | Boolean extends Object |
注意:1.数值型都继承Number
2.int型的包装类Integer
3.char的包装类Character
装箱:基本数据类型 ->包装类
int i = 100;
Integer integer = Integer.valueOf(i);//装箱
System.out.println(integer);
拆箱:包装类->基本数据类型
Integer integer = new Integer(100);
int i = integer.intvalue();//拆箱
System.out.println(i);
JDK1.5新特性:自动装箱、自动拆箱
自动装箱:基本数据类型 -> 包装类
int i = 100;
Integer integer = i;//自动装箱(底层实现:Integer.valueOf(i);)
System.out.println(integer);
自动拆箱:包装类 -> 基本数据类型
Integer integer = new Integer(100);
int i = integer;//自动拆箱(底层实现:integer.intValue();)
System.out.println(i);
应用场景:集合(类似数组的容器),但是集合只能存引用数据类型,如果想存储基本数据类型,就可以把基本数据类型转换为对应的包装类对象
需求:把字符串数组{“1”,“2”,“3”,“4”,“5”}转换为int数组
public class Test02 {
public static void main(String[] args) {
String[] ss = {"1","2","3","4","5"};
int[] is = new int[ss.length];
for (int i = 0; i < is.length; i++) {
//1.将String转换为Integer对象
//2.Integer对象自动拆箱成int数据
int num = Integer.valueOf(ss[i]);
is[i] = num;
}
for (int element : is) {
System.out.println(element);
}
}
}
1
2
3
4
5
深入包装类底层源码
Integer底层有个缓存类,缓存类中有个数组,存储了-128127的Integer对Integer.valueOf(num)底层会判断num是否在-128127这个区间,如果在内就从缓存数组中获取数据,如果不在这个区间就new对象
Integer integer1 = Integer.valueOf(100);
Integer integer2 = Integer.valueOf(100);
System.out.println(integer1 == integer2);//true
Integer integer3 = Integer.valueOf(200);
Integer integer4 = Integer.valueOf(200);
System.out.println(integer3 == integer4);//false