MST

星途 面试题库

面试题:Java中Integer的缓存机制

请阐述Java中Integer类的缓存机制原理,以及缓存范围是多少?在什么场景下会使用到这个缓存机制?
25.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Integer类的缓存机制原理

Java中的Integer类缓存机制是基于享元模式实现的。当通过valueOf(int i)方法获取Integer对象时,如果传入的值在缓存范围内,会直接返回缓存中的对象,而不是创建新的Integer对象。这是因为Integer类内部维护了一个IntegerCache静态内部类,该类在类加载时就创建并初始化了一个Integer数组来缓存一定范围内的Integer对象。

缓存范围

默认情况下,Integer类的缓存范围是 -128 到 127。这个范围可以通过-Djava.lang.Integer.IntegerCache.high系统属性来调整上限,但下限始终是 -128。

使用场景

  1. 频繁使用小整数对象:在程序中频繁创建表示小整数的Integer对象时,如循环中使用Integer作为计数器,缓存机制可以减少对象创建开销,提高性能和节省内存。例如:
for (int i = 0; i < 100; i++) {
    Integer integer = Integer.valueOf(i);
    // 这里的integer对象如果在缓存范围内,会复用缓存对象
}
  1. 对象比较:由于缓存范围内的Integer对象是同一个实例,在进行==比较时,如果值在缓存范围内,可以利用这一特性判断两个Integer对象是否为同一实例,而不仅仅是值相等。但要注意,使用equals方法比较值才是更通用和安全的方式。例如:
Integer a = Integer.valueOf(10);
Integer b = Integer.valueOf(10);
System.out.println(a == b); // true,因为10在缓存范围内,a和b是同一个对象