为了账号安全,请及时绑定邮箱和手机立即绑定

关于自动拆箱跟自动装箱的问题求解

关于自动拆箱跟自动装箱的问题求解

qq_遁去的一_1 2018-07-17 11:14:43
求解答案为什么是这些
查看完整描述

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,希望我的解释对您有用

查看完整回答
反对 回复 2018-08-10
  • 1 回答
  • 0 关注
  • 615 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号