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以下亦然
关于Integer对象比较,和int基本类型比较的一些问题,布布扣,bubuko.com
原文:http://zhudaoyan123.blog.51cto.com/8888071/1540419