【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的值,而是类似于地址的东西,所以不相等。

相关推荐
坐吃山猪2 小时前
SpringBoot01-配置文件
java·开发语言
我叫汪枫3 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
yaoxtao3 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu
Swift社区4 小时前
从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
java·开发语言
DKPT5 小时前
JVM中如何调优新生代和老生代?
java·jvm·笔记·学习·spring
phltxy5 小时前
JVM——Java虚拟机学习
java·jvm·学习
seabirdssss7 小时前
使用Spring Boot DevTools快速重启功能
java·spring boot·后端
喂完待续7 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
benben0447 小时前
ReAct模式解读
java·ai