java基础之Integer类
Integer里面最重要的就是一个内部类了
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
// 静态代码块
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
// 转成成int类型
int i = parseInt(integerCacheHighPropValue);
// 求出二者之间的最大值
i = Math.max(i, 127);
// 求出二者之间的最小值
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
// 如果上面输入的integerCacheHighPropValue为空,那么这里的最大值就是h
// 否则就是127.也就是说最大值可以自己来进行指定
high = h;
// 默认的是256,所以长度也是256
cache = new Integer[(high - low) + 1];
int j = low;
// 将默认的值存储到数组中去
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
从上面可以看出默认Integer[]的范围是的是-128到+127,这个已经由静态代码块初始化做好的事情,一旦加载到了JVM中去了,就会存在于JVM中。这里不知道是整数型常量池还是哪里,目前先记住,回头了解清楚了再回来解释。
看一个重要方法:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
首先会检查一下,传入进来的值,基本类型的值是否在low~high的范围之间,如果在的话,那么就直接返回在数组中的值;如果超过了对应的值,那么将会在堆中创建出来新对象来进行保存。
除此之外,需要看一下这里的内部类,方便来进行学习。
从理论中来,到实践中去,最终回归理论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?