1:前言
又到了一年面试季了!小威哥准备出一个面试专题系列,大家有什么想问的题目请留言哦,虽然我可能大部分也不懂哈哈哈😁。
2:问题
给定如上的代码,输出结果是怎么样的 -> 答案是 第一个为true,第二个是false
那么问题来了: 为什么会这样呢,大家都知道==是指引用相等,可是int1和int2明明是两个对象为什么是等于呢,既然第一个输出是true,到了第二个输出却是false呢。那就让我们揭开答案
3:题目解析
- 大家都知道java里面基本类型和对象类型的自动拆箱装箱机制,其实在 Integer int1 = 127; 的时候触发自动装箱,这时候会调用 Integer.valueof()进行装箱为 Integer.我们来看下这个方法:
- 这里的low是-128,high是127,所以在这个范围内,我们不会去new一个新的对象,会从IntegerCache中拿一个对应的Integer对象(IntegerCache会预先生成-128到127的每个Integer实例).
- 所以上面的int1 和 int2 其实是同一个实例,int3和int4就不是同一个实例了.
- 这里引申出来的一个问题就是会问这几个实例的堆栈内存指向.
4:总结
由此大家可以看到:这个小小的问题也有大大的基础学问,以后我们在开发当中如果是Integer和Long这样的实例对比,千万不要直接==哦,至少两边要有一个基本类型才会自动拆箱去对比基本类型.
好了,第一期就写个简单的吧,祝大家都能面试成功拿到心仪的offer哦。