java integer的面试题_java经典面试题解析-第一期:Integer装拆箱==问题

大家好,我是小威哥,欢迎来到我的经典面试题解析,我会在这个系列中还原我在面试中遇到的一些有趣的很值得回味的问题,并且进行解析,如果有错误和建议请联系我!

面试问题如下:

65a220a8ac70

给定如上的代码,输出结果是怎么样的 -> 答案是 第一个为true,第二个是false

那么问题来了: 为什么会这样呢,大家都知道==是指引用相等,可是int1和int2明明是两个对象为什么是等于呢,既然第一个输出是true,到了第二个输出却是false呢。那就让我们揭开答案

题目解析:

大家都知道java里面基本类型和对象类型的自动拆箱装箱机制,其实在 Integer int1 = 127; 的时候触发自动装箱,这时候会调用 Integer.valueof()进行装箱为 Integer.我们来看下这个方法:

65a220a8ac70

这里的low是-128,high是127,所以在这个范围内,我们不会去new一个新的对象,会从IntegerCache中拿一个对应的Integer对象(IntegerCache会预先生成-128到127的每个Integer实例). 所以上面的int1 和 int2 其实是同一个实例,int3和int4就不是同一个实例了.这里引申出来的一个问题就是会问这几个实例的堆栈内存指向.

由此大家可以看到:这个小小的问题也有大大的基础学问,以后我们在开发当中如果是Integer和Long这样的实例对比,千万不要直接==哦,至少两边要有一个基本类型才会自动拆箱去对比基本类型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值