关于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.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值