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.