猿问

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

  • 求解答案为什么是这些


qq_遁去的一_1
浏览 616回答 1
1回答

紫衣仙女

这是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,希望我的解释对您有用
随时随地看视频慕课网APP

相关分类

Java
我要回答