1. 今天有朋友问了我一个关于int Integer比较的面试题
Integer a=new Integer(3); Integer b=3; // java在编译的时候,被翻译成-> Integer b = Integer.valueOf(3); int c=3; System.out.println(a==b); System.out.println(a==c);
运行结果 false ture,
第一个因为a是new出来的对象,与b的地址引用不同,所以为false;
第二个因为比较的时候发生自动拆箱,将a自动变为int,不管值为多少始终是相等的。
总结一下,只要是2个new出来的Integer比较,肯定是fales,因为他们的引用地址不同,
只要是integer与int比较,都是ture。因为会把intger自动变为int。
2. 还有一种情况:
Integer a = 127; Integer b = 127; Integer c = 128; Integer d = 128; System.out.println(a == b); System.out.println(c == d);
运行结果ture, false 。
Intger a =127相当于 Integer a =Integer.valueOf(127);查看 valueOf() 源码:
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); }对于-128到127之间的数,会进行缓存,Integer a= 127时,会将127进行缓存,下次再写Integer b= 127时,就会直接从缓存中取,就不会new了。所以运行的结果为true,false.