1、自动拆箱和装箱
int a = new Integer(10);//自动拆箱
Integer i1 = 10;//自动装箱
2、自动装箱后内存地址不一致原因
前提:==是用来判断内存地址是否一致
Integer i1 = 10;//自动装箱
Integer i2 = 10;//自动装箱
/**
* 根据源码可知,当值在-128和127之间时,会创建一个cache数组存放向上转型后的Integer对象,然后由于 cache是静态代码块中的,所以cache数组创建后是稳定不变的,所以10在-128-127范围内,每次从cache 数组中取出的值是一样的,==判断的是内存地址是否一致,所以i1==i2为true
*/
System.out.println(i1==i2);//打印true
Integer i3 = 200;
Integer i4 =200;
/**
* 根据源码可知,当值不在-128和127之间时,会创建一个新的向上转型后的Integer对象,==判断的是内存地址是否一致,因为200不在-128-127范围内,所以每次都会new 一个Integer对象,内存地址不一样,所以i3==i4为false
*/
System.out.println(i3==i4);//打印false