Integer的equals方法

在写代码的时候发现Integer也有equals方法。那么它和string的equals方法有什么区别呢?

这是Integer的方法源码:

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

可以看见是把对比的对象看是不是Integer类型的,是的话就转为int基本类型再用 == 比较,比较的就是数值了。所以来点特殊的。

代码测试:

                Integer q=300;
		Integer w=300;
		Integer e=100;
		Integer f=100;
		if (q==w){
			System.out.println(" == **********"+"q和w匹配成功"+"***********");
		}
		if (e==f){
			System.out.println(" == **********"+"e和f匹配成功"+"***********");
		}
		if(q==300){
			System.out.println(" == **********"+"q和300匹配成功"+"***********");
		}
		if(q.equals(w)){
			System.out.println(" equals **********"+"q和w匹配成功"+"***********");
		}
		if(e.equals(f)){
			System.out.println(" equals **********"+"e和f匹配成功"+"***********");
		}

输出结果:

 == **********e和f匹配成功***********
 == **********q和300匹配成功***********
 equals **********q和w匹配成功***********
 equals **********e和f匹配成功***********

得 可以发现q和w的第一次 “==”匹配是不成功的。

查资料可以知道Integer有缓存数组,即-128<=value<=127,都从缓存数组中获取Integer对象。对于测试中的,q和w都是超过了缓存的值,因此都是new的新得对象,所以==匹配不了。所以我们不难理解,Integer的“==”方法是比较地址的。而Integer的equals方法则不会有这些问题,是直接字面上的比较。

因此使用Integer做比较的时候,的区分是否超过了缓存数组的区域。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值