Integer你真的了解吗,快来瞅瞅吧

//首先我们看一下代码
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在比较

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章