Integer的自动缓存

Interger装箱有个自动缓存的概念
      Integer a = 100;
		Integer b = 100;
		Integer c = 200;
		Integer d = 200;
		System.out.println(a == b);  //true
		System.out.println(c == d);  //false                                           
Integer是对象,==比较的是对象在内存中的物理地址,但是Integer有个缓存的概念,
符合规范的Java实现必须保证Integer的缓存至少要覆盖[-128, 127]的范围
,查看源码:
 public static Integer valueOf(int i) {
	final int offset = 128;
	if (i >= -128 && i <= 127) { // must cache 
	    return IntegerCache.cache[i + offset];
	}
        return new Integer(i);
    }
在这个scope之内的所有是相同的,超过这个scope就是从heap上重新new一个所以是不相同的

这个缓存在VM启动时是可以配置的

你可能感兴趣的:(Integer的自动缓存)