//首先我们看一下代码
Integer a1=new Integer(10);
Integer a2=new Integer(10);
Integer a3=10;
int a4=10;
Integer a5=10;


Integer a6=1232;
Integer a7=1232;

System.out.println("a1==a2:"+(a1==a2));//false
分析:a1和a2明显是两个对象,对象之间比较;equals或者intValue();进行对比

System.out.println("a2==a3:"+(a2==a3));//false
分析:a2和a3分别是两个对象,同上

System.out.println("a2==a4:"+(a2==a4));//true
分析:a2是单独的一个对象,a4是一个数值类型,在发生运算时,a2自动拆箱为int,
转换成数值类型,进行对比
补充:
装箱拆箱是jdk1.5之后的新的特性
Integer a3=10 装箱 底层执行的是Integer a3=Integer.valueOf(10);
int a4=a3 拆箱 底层执行的是a3.intValue();

System.out.println("a1==a2:"+(a5==a3));//true
分析:
也是对象比较,Integer的取值范围-128~127
a5和a3的值是在这个区间范围之内,结果就是true
因为由IntegerCache.cache(是个Integer类型的数组)中查找
IntegerCache类专门负责Integer缓存的


System.out.println("a1==a2:"+(a6==a7));//false
分析:也是对象比较,超出缓存范围 new Integer(1232),故false


源码结论:
1:i>=128 || i<-128 =====>>new Integer (i)
2:i<128 && i>=-128 =====>>small_values[i+128]

本章节总结:
1:Integer是int的包装类,int初始值为0,Integer 初始值为null
2:无论值是否相同,Integer和new Integer(i) 都不相同
3:两个都是非new出来的Integer,如果数值在-128~127之间,则为true
否则为false
4:两个new出来的,无论值是否相同,引用地址则不通,则为false
5:int和Integer比,值相同为true,否则false,
无论Integer是new出来的还是
在-128~127范围之外的,因为Integer会自动拆箱为int在比较