为什么 Java 中“1000==1000”为false,而”100==100“为true?

这是一个挺有意思的讨论话题。

如果你运行下面的代码:

image-20220304163602699

你会得到:

image-20220304163611875

基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。

因此,后面一条语句也应该是false 。

这就是它有趣的地方了。如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。

所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——

image-20220304163623689

的时候,它实际上在内部做的是

image-20220304163632777

现在,如果我们去看valueOf()方法,我们可以看到:

image-20220304163643701

如果值的范围在-128到127之间,它就从高速缓存返回实例。

所以…

image-20220304163653178

指向了同一个对象。

这就是为什么我们写

image-20220304163711293

我们可以得到true。

现在你可能会问,为什么这里需要缓存?

合乎逻辑的理由是,在此范围内的“小”整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。

然而,通过反射API你会误用此功能。

运行下面的代码,享受它的魅力吧!

image-20220304163728601

如果本文对你有帮助的话,请不要吝啬你的赞,谢谢!

金三银四已经开始了,许多程序员朋友最近要冲击大厂,自己总结的一些面试大厂的 PDF 及其答案,免费分享给大家,希望对大家今年找工作有所帮助

下面是内容截图,需要学习的,点击这里免费领取。

Java 基础技术

img

Java 集合

img

JVM

img

多线程与高并发

img

image.gif
img

SSM 框架

Java 横向技术

img

数据库

img

消息中间件

img
img

Linux

img

Elasticsearch

img

最后

整份文档一共有将近 300页,全部为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵,需要学习的,点击这里免费领取。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容