概念
public class IntegerTest04 {
public static void main(String[] args) {
//java5之后,引入一种新特性,自动装箱和自动拆箱
//自动装箱:基本数据类型自动转换为包类型
//自动拆箱:包类型自动转换为基本数据类型
//900是基本数据类型
//x是包装类型
//基本数据类型-(自动转换)->包装类型:自动装箱
Integer x = 900;
//x是包类型
//y是基本数据类型
//包类型-(自动转换)->基本数据类型
int y = x;
System.out.println(y);//900
//z是一个引用,z是一个变量,z还是保存一个对象的内存地址
Integer z = 1000;//等同于 Integer z = new Integer(900);
/*
为什么没有报错?
+的两边要求是基本数据类型,z是包装类,不属于基本数据类型,这里会进行自动拆箱。将z转换为基本数据类型
在java5之前的编译器会报错
*/
System.out.println(z+1);//1001
Integer a = 1000;//a是一个引用,保存内存地址指向对象
Integer b = 1000;//b是一个引用,保存内存地址指向对象
// == 比较的是两个对象的内存地址,a和b两个引用中保存的内存地址不同
// == 这个运算符不会触发自动拆箱机制。(只有+ - * /等运算的时候才会)
System.out.println(a == b);//false
}
}
特殊情况
public class IntegerTest04 {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
System.out.println(a == b);//false
/*
java中为了提高程序的执行效率,将[-128到127]之间所有的包装对象提前创建好了,
防到了一个方法区的"整数型常量池"当中了,目的是只要用这个区间的数据不需要
再new了,直接从整型常量池中取出来
*/
Integer x = 127;
Integer y = 127;
System.out.println(x == y);//true
}
}