Integer类型的a和b,a==b的争议

非常简单的一段代码,有时候却藏着一道玄机:

面试常问这题,其实是在考察享元模式,大家都知道输出为true。因为查看Integer源码

Integer类型的a和b,a==b的争议_第1张图片

就知道Integer会缓存-128到127之间的对象,调用valueOf方法会返回对应的缓存对象,从而避免频繁创建对象拉低性能。

但是,最近我面试时,遇到一种说法:

赋值时自动装箱,a==b时自动拆箱。

虽然结果一致,但是解释不同。当时一下子有点懵,回家之后立即求证:编译上面这段代码,javap -verbose  TestMain.class  查看字节码

Integer类型的a和b,a==b的争议_第2张图片

从字节指令上可以看出,==比较时并没有什么拆箱操作(拆箱是自动调用intValue方法)。

所以,Integer类型的a==b,不存在赋值时装箱,比较时拆箱的说法。

你可能感兴趣的:(Integer类型的a和b,a==b的争议)