非常簡單的一段代碼涩笤,有時候卻藏著一道玄機:
面試常問這題蹬碧,其實是在考察享元模式,大家都知道輸出為true恩沽。因為查看Integer源碼
就知道Integer會緩存-128到127之間的對象,調(diào)用valueOf方法會返回對應(yīng)的緩存對象里伯,從而避免頻繁創(chuàng)建對象拉低性能渤闷。
但是,最近我面試時飒箭,遇到一種說法:
賦值時自動裝箱,a==b時自動拆箱漫萄。
雖然結(jié)果一致,但是解釋不同。當時一下子有點懵毕骡,回家之后立即求證:編譯上面這段代碼岩瘦,javap -verbose ?TestMain.class ?查看字節(jié)碼
從字節(jié)指令上可以看出窿撬,==比較時并沒有什么拆箱操作(拆箱是自動調(diào)用intValue方法)。
所以密末,Integer類型的a==b跛璧,不存在賦值時裝箱,比較時拆箱的說法追城。