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

相关推荐
427724001 小时前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
李长渊哦2 小时前
常用的 JVM 参数:配置与优化指南
java·jvm
计算机小白一个2 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
南宫生5 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
计算机毕设定制辅导-无忧学长5 小时前
Maven 基础环境搭建与配置(一)
java·maven
风与沙的较量丶6 小时前
Java中的局部变量和成员变量在内存中的位置
java·开发语言
m0_748251726 小时前
SpringBoot3 升级介绍
java
极客先躯7 小时前
说说高级java每日一道面试题-2025年2月13日-数据库篇-请说说 MySQL 数据库的锁 ?
java·数据库·mysql·数据库的锁·模式分·粒度分·属性分
程序员侠客行7 小时前
Spring事务原理 二
java·后端·spring