StackTc 2018-03-02 02:30 采纳率: 90.9%
浏览 784
已采纳

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

图片说明

求解答案为什么是这些

  • 写回答

7条回答 默认 最新

  • 是启山啊 2018-03-02 03:13
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?