Integer a= 100,Ingeger b =100,Ingeter c=1000, Ingeter d=1000,system.out true,false

本文深入探讨了Java中Integer对象的缓存机制,解释了为什么在-128到127之间的整数比较可以使用==,而超出这个范围则不行。通过分析Integer源码,揭示了IntegerCache的作用及其实现细节。
摘要由CSDN通过智能技术生成
面试题
public class Main { 
	 public static void main(String[] args) { 
	        Integer i1 = 100; 
	        Integer i2 = 100; 
	        Integer i3 = 200; 
	        Integer i4 = 200; 
	        System.out.println(i1==i2); 
	        System.out.println(i3==i4); 
	  }
}
结果输出: true
		  false

原因:
Integer i1 = 100;
实际上调用Integer i= Integer.valueOf(100)

Integer源码:

	public static Integer valueOf(int i) {
		 if (i >= IntegerCache.low && i <= IntegerCache.high)
   			 return IntegerCache.cache[i + (-IntegerCache.low)];
		 return new Integer(i);
	}

如果不满足if条件就执行new Integer(i)

public Integer (int value) {
    this value= value;
}

IntegerCache 是 Integer 的静态内部类,因此在 Integer 初始化时同时初始化 IntegerCache 及其所有属性

private static class IntegerCache {
    static final int low = -128; // 缓存下界,值不可变
    static final int high; // 缓存上界
    static final Integer cache[]; // cache缓存是一个存放Integer类型的数组
    static {
        // high value may be configured by property
        int h = 127;
        // getSavedProperty() 获取虚拟机启动时配置参数java.lang.Integer.IntegerCache.high的值,
        // 该值为自行设置的缓存上界,看下面代码
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;
        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() {}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值