1 回答

紫衣仙女
TA贡献1839条经验 获得超15个赞
这是Integer和Long的equals方法的源码:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
这样就可以很清楚解释以上现象啦~
首先是倒数第四行,abc全部是是Integer,所以b+c的结果是Integer对象,自然返回Ture;
至于倒数第二行和倒数第一行则是因为a+b的结果是Integer,所以为直接返回False;计算a+h的过程中发生了类型提升,结果为Long,所以就调
用了longValue(),自然为True;
第一行和第三行以及倒数第三行均可以用缓存解释~
至于第二行则是==与equals方法的区别,首先a==b比较的并不是ab代表的内容,而是其内存地址,即引用对象是否是同一个;
c,d均来源与缓存区,自然地址一样(不是数字一样);而e和f则来自堆栈,相当于new出来的,自然地址不一样啦。
ok,希望我的解释对您有用
添加回答
举报
0/150
提交
取消