【小威哥带你面试】第1期:Integer装拆箱==问题

1:前言

又到了一年面试季了!小威哥准备出一个面试专题系列,你们有什么想问的题目请留言哦,虽然我可能大部分也不懂哈哈哈😁。java

2:问题

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

那么问题来了: 为何会这样呢,你们都知道==是指引用相等,但是int1和int2明明是两个对象为何是等于呢,既然第一个输出是true,到了第二个输出倒是false呢。那就让咱们揭开答案3d

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这样的实例对比,千万不要直接==哦,至少两边要有一个基本类型才会自动拆箱去对比基本类型.cdn

好了,第一期就写个简单的吧,祝你们都能面试成功拿到心仪的offer哦。
相关文章
相关标签/搜索