首页 > 代码库 > Integer比较

Integer比较

/**
 * @time 2014-06-25
 * @author Cao HaiCheng
 *
 */
public class demo {
	public static void main(String[] args) {
		test1();
		test2();
		test3();
		test4();
		test5();
	}
	/**
	 * 第一个答案是false很好理解,因为'=='操作符比较的是两个对象的地址,a和b指向的地址不同
	 */
	private static void test1() {
	    Integer a = new Integer(50);  
	    Integer b = 50;  
	    System.out.println("test1运行结果:"+(a == b));   //false
	}

	/**
	 * 这个答案是true,Integer a=50属于自动装箱,调用的是编译器中的public static Integer valueOf(int i)方法
	 * 我们看下这个方法:
	 *     public static Integer valueOf(int i) {
        		assert IntegerCache.high >= 127;
        		if (i >= IntegerCache.low && i <= IntegerCache.high)
            		return IntegerCache.cache[i + (-IntegerCache.low)];
        		return new Integer(i);
   		   }

	 * 
	 * 我们可以看到jdk源码中定义的这个方法意思是这样的:当i的值在某个范围之间的时候不用创建对象,直接去IntegerCache中取,再看下这个
	 * IntegerCache类:
	 *     private static class IntegerCache {
		        static final int low = -128;
		        static final int high;
		        static final Integer cache[];
		
		        static {
		            // high value may be configured by property
		            int h = 127;
		            String integerCacheHighPropValue =
		                http://www.mamicode.com/sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");>