【小威哥帶你面試】第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哦。
相關文章
相關標籤/搜索