数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
一、定义
基本数据类型对应的引用数据类型,默认值为null
二、装箱、拆箱
1.装箱
基本数据类型转换成引用数据类型
int num=1;
//创建对象将基本数据类型变量作为参数传入
Integer num2=new Integer(num);
2.拆箱
引用类型转换成基本数据类型
Integer num=new Integer(15);
//intValue方法将Integer的值以int类型返回出来
int num2=num1.intValue();
3.自动装箱、拆箱
java编译器自动转换两者的类型
/*1.自动装箱
valueOf(int i)
返回一个表示指定的 int 值的 Integer 实例。
实际上执行这段代码的时候,系统会通过valueOf(int i) 方法返回一个int值的实例
*/
Integer num1=100;//等同于Integer num1=Integer.valueOf(100)
/*2.自动拆箱
intValue()以 int 类型返回该 Integer 的值。
*/
int num2=num1;//int num2=num1.intValue()
三、关于整数缓存区
1.定义
java类在加载的时候会预先创建256个常用的整数包装类对象(范围-128~127),当引用对象值为这个范围内的话会直接指向预先创建的对象,不会再去开辟一块内存空间
2.涉及到的面试题
/*
判断输出的结果
*/
Integer num1=100;
Integer num2=100;
Integer num3=200;
Integer num4=200;
Integer num5=new Integer(100);
Integer num6=new Integer(100);
System.out.println(num1==num2)
System.out.println(num3==num4)
System.out.println(num5==num6)
/*
结果输出
true
false
false
解析:以上都是引用数据类型,比较的是内存地址不是数值!
1.100在整数缓存区的范围内,类加载的时候提前为100开辟了一块内存地址,num1、num2直接指向缓冲区中100的内存地址(整数缓存区取值范围内值相同的2个引用数据内存地址是相同的)
2.200超过了整数缓存区的范围,num3、4引用的时候会各自开辟一块内存空间,所有两者内存地址是不同的结果为false
3.虽然100在整数缓存区的范围内,但是num5、num6是创建了各自的对象出来,也不是指向缓存区中内存地址,所以结果也是false
*/