Integer的比较和注意点

先看代码:

    public static void main(String[] args) {
        Integer a = new Integer(175);
        Integer b = new Integer(175);
        Integer c = new Integer(120);
        Integer d = new Integer(120);

        Integer z = 175;
        Integer x = 175;
        Integer n = 75;
        Integer v = 75;
        System.out.println("a.equals(b) : "+ a.equals(b));
        System.out.println("a==b: " +(a==b));
        System.out.println("c.equals(d) : "+ c.equals(d));
        System.out.println("c==d: " +(c==d));
        System.out.println("z==x: "+ (z==x));
        System.out.println("n==v: "+(n==v));
        System.out.println("z.equals(x): "+ z.equals(x));
        System.out.println("n.equals(v): "+ n.equals(v));
    }

结果:

a.equals(b) : true
a==b: false
c.equals(d) : true
c==d: false
z==x: false
x==v: true
z.equals(x): true
n.equals(v): true

什么原因呢:

Integer有个缓存机制 : -128~127

也就是说,当你声明两个Integer 对象(不使用new)时,如果值是在此范围之内, 使用"==" 结果是true ,但是一旦超过了此范围,则会在堆中重新声明一块地址,此时再用"==" 结果就会返回false 

并且 使用"==" 比较两个值相等的使用 new Integer() 生命的对象时,即使值相等,结果也依然是false。因为这两个Integer对象其实是指向两块不同的内存地址的。 有点像String类型。

推荐 : 使用 equalse 比较两个 Integer的值 

因为 使用equals 比较不管使用哪种声明方式,结果都可以理解为是比较声明的对象的值。

来看《阿里巴巴Java开发手册》的建议:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值