问题:
Java的Integer类内部实现了一个静态缓存池,用于存储特定范围内的整数值对应的Integer对象。默认情况下,这个范围是-128至127。当通过lnteger.valueOf(int)方法创建一个在这个范围内的整数对象时,并不会每次都生成新的对象实例,而是复用缓存中的现有对象,会直接从内存中取出,不需要新建个对象。
实践:
public class Test {
public static void main(String[] args) {
Integer a = Integer.valueOf(1);
Integer b = Integer.valueOf(1);
System.out.println(a==b);;
}
}
源码:
private static class IntegerCache {
//整体的思路就是
//1.valueof或者自动装箱调用该类的静态代码块
//2.可以通过jvm设定最大值,也可以不设定
//3.设定好最大值,计算范围,生成新的数组赋值给归档文件,
//4.最后再赋值给cache缓存
//缓存的下界,默认值为 -128,固定不可修改
static final int lo