首页 > 代码库 > 关于Integer对象比较,和int基本类型比较的一些问题

关于Integer对象比较,和int基本类型比较的一些问题

public class Test {

	public static void main(String[] args) {
		
		Integer j = 192;
		int i = 192;
		System.out.println(new Integer(12) == new Integer(12));//false对象比较。///必然不同
		System.out.println(new Integer(192) == i);//true自动拆箱
		System.out.println(j == i);//true自动拆箱
		Integer x = 127;
		Integer y = 127;
		System.out.println(x == y);//java在编译的时候,被翻译成-> Integer i5 = Int//eger.valueOf(127);
		Integer k = 128;
		Integer l = 128;
		System.out.println(k == l);
	}

}
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);
    }

上面为Integer的valueOf源码对于-128到127之间的数,会进行缓存,Integer = 127时,会将127进行缓存,下次再写Integer = 127时,就会直接从缓存中取,就不会new了。所以小于等于127时候会true大于会false。。当然-128以下亦然