Java中Integer类的IntegerCache的作用

 包名:java.lang

文件名:Integer.java

方法名:IntegerCache

方法的代码如下:

    private static class IntegerCache {
        static final int high;
        static final Integer cache[];

        static {
            final int low = -128;

            // high value may be configured by property
            int h = 127;
            if (integerCacheHighPropValue != null) {
                // Use Long.decode here to avoid invoking methods that
                // require Integer's autoboxing cache to be initialized
                int i = Long.decode(integerCacheHighPropValue).intValue();
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - -low);
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }

        private IntegerCache() {}
    }


我们在代码中看到,low为-128,high为127,这样的话,在Java编程中,如果要使用-128——127这个区间的对象的话,是直接使用这个Cache中的对象的。

举个例子,代码如下:

package p201108.practicalBook.chapter02;

public class AutoBoxingTrouble1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer x = 10;
		Integer y = 10;
		
		if(x == y) {
			System.out.println(" x == y");
		} else {
			System.out.println(" x != y");
		}
	}

}


输出结果为:

 x == y


再举一个不在缓冲区内例子看下。

 

package p201108.practicalBook.chapter02;

public class AutoBoxingtrouble2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer x = 500;
		Integer y = 500;
		
		if(x == y) {
			System.out.println(" x == y");
		} else {
			System.out.println(" x != y");
		}
	}

}


输出结果为:

 x != y


在自动装箱AutoBoxing方面,可见Java却是做了一些工作来提高效率。

如果需要确切的、可控制的对象,还是要使用new关键字来初始化对象。

例子如下:

package p201108;

public class Test01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer value1 = new Integer(10);
		Integer value2 = new Integer(10);
		
		if(value1 == value2) {
			System.out.println(" value1 == value2");
		} else {
			System.out.println(" value1 != value2");
		}
	}

}


输出结果:

 value1 != value2


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值