java中Integer的比较的问题

public class Test {
  public static void main(String[] args) {
   Integer iobj1=3;
   Integer iobj2=3;
   Integer iobj3=300;
   Integer iobj4=300;
   System.out.println(iobj1 == iobj2);//true
   System.out.println(iobj1.equals(iobj2));//true
   System.out.println(iobj3 == iobj4);//false
   System.out.println(iobj3.equals(iobj4));//true
  }
 }
Integer的源码可以发现有这么几行代码:
if(i >= -128 && i <= IntegerCache.high)
     return IntegerCache.cache[i + 128];
else
     return new Integer(i);
再去看IntegerCache类发现这个数组的值是-128~127,因为300>127所以会new 一个Integeriobj3、iobj4都是在栈中保存的一串堆的地址,堆里面才是数值300,所以iobj3 == iobj4比较的是栈中的值(堆的地址不同所以结果false),而iobj3.equals(iobj4)对比的是堆中的内容(都是300,返回true)
自动装箱时-128--127有缓冲池,是同一个对象,如果不在这个范围内,将会新建对象,所以对象会不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值