Integer自动拆箱与自动装箱的相关问题

简介: Integer自动拆箱与自动装箱的相关问题
问题1


Integer a = 9;
        int b = 9;
        boolean f = a==b;


这里的输出是true,通过断点分析发现,在进行**==**判断的时候Integer类型的a拆箱,然后再对像个int类型的数据进行比较


问题2


Integer a = 9;
        int b = 9;
        boolean ff = a.equals(b);


这里自己先分析一下,应该是先对b进行装箱,让后再进行equal比较。断点分析一下,确实如此


通过断点测试发现:一个Integer·数据和一个int数据进行+,-,*,/,%运算都是先拆箱成int类型的数据在进行运算的


个人看法:开发jdk的类代码的人都是大牛中的大牛,考虑问题一定很完全,会找到之间复杂度与空间复杂度对小的实现来完成。所以自动拆箱与自动装箱的过程也就不难理解了


问题3


Integer i=null;
        int j=i;


运行:


报错,NullPointerException


分析:i是Integer类型的值为null的对象,第二行,i进行拆箱调用intValue()方法代码如下


    public int intValue() {
        return value;
    }


从代码中可以发现return返回value,但实际上他写完整是:this.value 。所以当Integer对象为null拆箱时,会报空指针异常。


问题4


        Integer a=127;
        Integer b=127;
        Integer c=128;
        Integer d=128;
        System.out.println(a==b);
        System.out.println(c==d);


不妨先想想这个的输出结果,乍一看立马就会脱口而出两个true。


但实际上是true,false。


原因:


Integer的值在-128到127时,Integer对象是在IntegerCache.cache产生,会复用已有对象,也就是说,这个区间的Integer可以直接用等号进行判断。

Integer的值在-128到127之外时,Integer对象在堆上产生,不会复用已有对象,用等号会返回false

相关文章
|
Java
包装类的使用
包装类的使用
65 0
|
6月前
|
存储 安全 Java
day7:基本类型转换、包装类、自动装箱、自动拆箱
【7月更文挑战第7天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
49 3
|
缓存
包装类
包装类
76 0
|
存储 Java
包装类和基本数据类型
包装类和基本数据类型
|
缓存 Java
基本数据类型包装类
基本数据类型包装类
71 0
|
存储 缓存 Java
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
271 0
Java基本类型和包装类什么情况下判断相等(“==“或“equals“)?
|
Java 大数据
6、包装类及其相关
包装类及其相关
138 0
6、包装类及其相关
|
Java
Java中包装类、int和String类型相互转换、自动拆箱和自动装箱及字符串数据排序案例
包装类、int和String类型相互转换、自动拆箱和自动装箱及字符串数据排序案例的简单示例
166 0
|
缓存 Java 编译器
包装类的自动装箱拆箱,==运算符及equals方法
包装类的自动装箱拆箱,==运算符及equals方法详解
159 0
包装类的自动装箱拆箱,==运算符及equals方法