关于int Integer比较的问题

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.


猜你喜欢

转载自blog.csdn.net/qq_35583089/article/details/80263867