尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

关于java中Integer缓存数组的分析

发布时间:2026/9/11 10:53:43

资讯中心
01
ARTICLE

关于java中Integer缓存数组的分析

关于java中Integer缓存数组的分析
今天发现一个很有趣的事情java中的Integer如果两个变量值大于127就算值相等但是比较其对象则不一致。一、现象分析1、当Integer值为处于[-128127]时候i1和i2,i5和i6这两组对象相同2、当Integer值为处于上述取值范围外的时候i3和i4,i7和i8这两组对象相同3、在2的情况下其对象的值是相等的(equals)。二、原因分析Integer是java原生类我们可以查看其源码进行分析。1、Integer带有一个缓存存放对象当数据处于[-128127]则直接从获取对象否则新建一个Integer对象。2、而IntegerCache是一个静态内部类其缓存cache是一个存放Integer的数组默认大小为1271281256。3、如果用户想修改大小可以调整java.lang.Integer.IntegerCache.high这个指默认127在java变量中调整“-XX:AutoBoxCacheMax”即可。在idea中把jvm中的AutoBoxCacheMax值设置为128运行得到i3i4的值就为true了。4、值得注意的是如果设置JVM里面-XX:AutoBoxCacheMax的值大于127则按设置的作为higt值如果小于等于127则按127来生效。我们验证可以设置AutoBoxCacheMax为50看到运行得到i1i1的值就为true证明AutoBoxCacheMax值依旧是127。三、总结1、IntegerCache这个缓存机制是把常用的值进行缓存减少对象创建和销毁对资源的占用。2、IntegerCache缓存在第一次使用时初始化而且类对象不被卸载的情况下是不会被GC。3、这个缓存机制也被其他自动封箱对象所实现比如Byte、Short以及Long范围也是[-128,127],但是其最大值是写死为127无法通过修改AutoBoxCacheMax。Float以及Double这组则没有对象缓存设置。这个也很好理解因为在某段数值范围内这两种类型值的数量是无限的无法进行缓存。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。