【Java】一个关于装箱的某里面试题

题目:

java 复制代码
package csdn;



public class test2 {
    public static void main(String[] args)  {
        Integer a=100;
        Integer b=100;
        System.out.println(a==b);
        Integer c=200;
        Integer d=200;
        System.out.println(c==d);

    }
}

求这个代码的输出结果。

答案:

第一个为true,第二个为false.

我们来看一下这个题,我们这里发生了装箱操作,所以我们得知道装箱过程是什么样的,我们来看一下反编译:

我们可以看到底层其实是调用了valueOf()这个方法,那我们去Integer类中找一下这个方法:

那也就是说,我们在进行自动装箱的时候,人家在底下会调用这个方法来帮我们进行装箱。

那我们再回到这个题目,这个题目在给a和b赋值的时候发生了装箱,装箱会调用valueOf()方法,那我们来理解一下这个方法:

因为a和b都是100,在这个范围之内,所以返回的都是相同的值,所以相等。

因为c和b是200,不在这个范围内,所以返回的都是new的对象,等号两边都是引用类型,比较的不是c和d的值,而是类似于地址的东西,所以不相等。

相关推荐
lkbhua莱克瓦2417 小时前
Java基础——集合进阶3
java·开发语言·笔记
蓝-萧17 小时前
使用Docker构建Node.js应用的详细指南
java·后端
多喝开水少熬夜17 小时前
Trie树相关算法题java实现
java·开发语言·算法
lkbhua莱克瓦2418 小时前
Java基础——集合进阶用到的数据结构知识点1
java·数据结构·笔记·github
音符犹如代码19 小时前
Java并发List实战:CopyOnWriteArrayList原理与ArrayList常见面试题
java·开发语言·面试·list
代码or搬砖19 小时前
Docker 部署 Java 项目实践
java·docker·容器
又是忙碌的一天19 小时前
抽象类和接口
java·开发语言
August_._19 小时前
【MySQL】SQL语法详细总结
java·数据库·后端·sql·mysql·oracle
Dxxyyyy19 小时前
零基础学JAVA--Day26(枚举类)
java·开发语言
黑屋里的马19 小时前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式