非常简单的一段代码,有时候却藏着一道玄机:
面试常问这题,其实是在考察享元模式,大家都知道输出为true。因为查看Integer源码
就知道Integer会缓存-128到127之间的对象,调用valueOf方法会返回对应的缓存对象,从而避免频繁创建对象拉低性能。
但是,最近我面试时,遇到一种说法:
赋值时自动装箱,a==b时自动拆箱。
虽然结果一致,但是解释不同。当时一下子有点懵,回家之后立即求证:编译上面这段代码,javap -verbose TestMain.class 查看字节码
从字节指令上可以看出,==比较时并没有什么拆箱操作(拆箱是自动调用intValue方法)。
所以,Integer类型的a==b,不存在赋值时装箱,比较时拆箱的说法。