概述
在写代码的时候发现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做比较的时候,的区分是否超过了缓存数组的区域。
最后
以上就是奋斗饼干为你收集整理的Integer的equals方法的全部内容,希望文章能够帮你解决Integer的equals方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复