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在比较
发布了28 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u013045746/article/details/105564454