Integer的 == 比较

Integer的是int的包装类,int的初值为0,Ingeter的初值为null。我们先看一段代码:

public static void main(String[] args) { 
    Integer a1=1; 
    Integer a2=1; 

    Integer b1=200; 
    Integer b2=200; 

    Integer c1=new Integer(1); 
    Integer c2=new Integer(1); 

    Integer d1=new Integer(200); 
    Integer d2=new Integer(200); 


    System.out.println("a1==a2?"+(a1==a2)); 
    System.out.println("b1==b2?"+(b1==b2)); 
    System.out.println("c1==c2?"+(c1==c2)); 
    System.out.println("d1==d2?"+(d1==d2)); 
}

运行结果:

a1==a2?true 
b1==b2?false 
c1==c2?false 
d1==d2?false

为什么是这样的呢?我们一个一个解释。

先比较a和b两组,Integer初始化时,缓存Integer对象数据,这些Integer对象对应的int值为byte范围,即[-128,127]。当直接给Integer赋int值时,如果值得范围为[-128,127],Integer直接从缓存中取Integer对象,因此,当直接赋的int值处于[-128,127]时,Integer对象为相同的对象。

通过new方式取的Integer对象,是直接从堆里面分配的对象,因此,不管具体的int值为多少,==判断的结果都是false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值