Integer源码及知识点扩展

本文深入探讨了Java中Integer缓存机制,解释了为何-128至127之间的值会被缓存,并分析了valueOf方法如何提升性能。同时,文章提到了IntegerCache类的作用,以及如何通过JVM参数调整缓存大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直把所学的东西记录在自己的笔记上,觉得也应该把一些知识分享出来,个人觉得在学习一个知识点不应该只局限在当前,而应该扩展出此知识点的其他内容以及带着疑问自己去研究,加深对知识的理解。

今天就先来分享一下Integer。

Integer很多人都很熟悉,就不做多基本介绍,直接聊Integer中的重点跟扩展。

本文要讲的重点是Integer缓存,其他构造函数以及方法跟一下源码很快就能懂得。

;

看到这个代码跟执行结果,小白会觉得:这是什么鬼。有经验的:这不就是Integer的缓存机制吗。是的,就是缓存机制。

无论是小白还是了解Integer缓存机制但是模糊的希望可以看下去。下面看源码:

源码一目了然,Integer缓存了-128到127的值,如果定义的Integer在这个范围内,它就会到缓存里取,否则就new Integer(i)重新创建对象了。所以会看到我们上面true跟false。在创建新的 Integer 对象之前会先在 IntegerCache.cache 中查找。有一个专门的 Java 类来负责 Integer 的缓存。IntegerCache 是 Integer 类中一个私有的静态类。

总结:

1.在创建Integer对象,尽量少用new创建,尽量使用valueOf。

2.在判断对象是否相等的时候尽量使用equals方法,避免使用“==”产生非预期结果。

3.建议亲自去跟一遍源码是最好的。

扩展:

一般面试或者整理一个知识点时总会扯到其它点、我们就比如面试,面试官问说说Integer,也许你能说出上面那些,但是,当面试官想继续深入问或者自己想装下逼,那就需要答出涉及这个点的其他东西了,体现出你对知识的深度。

1、Integer采用的是享元模式。主要用于减少创建对象的数量,以减少内存占用和提高性能。其实本质就是缓存。像String常量池,数据库连接池,线程池,这类把共享的东西缓存一起以免频繁创建,就是采用了享元模式。

2、Byte,Short,Long 也有固定范围: -128 到 127。对于 Character, 范围是 0 到 127。除了 Integer 可以通过参数改变范围外,其它的都不行。Integer最大值 127 可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改。需要改的根据程序而定,是否频繁使用到哪些值。Float ,Doulbe 没有缓存。

3、为什么是-128到127呢,因为这个范围的整数值是最常用的。在第一次使用 Integer 的时候也需要时间来初始化这个缓存。

后面会陆续在这里分享一些常见知识点。初衷是分享。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值