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

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

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

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容