加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java没有针对compareTo方法的int自动装箱?

发布时间:2020-12-14 06:08:17 所属栏目:Java 来源:网络整理
导读:class Test{ public static void main(String[] args){ int a = 1; int b = 5; Integer c = new Integer(1); Integer d = 5; //autoboxing at work System.out.println(c.compareTo(d)); System.out.println(a.compareTo(b)); }} 为什么不a.compareTo(b)编译

class Test{
    public static void main(String[] args){
        int a = 1;
        int b = 5;

        Integer c = new Integer(1);
        Integer d = 5; //autoboxing at work

        System.out.println(c.compareTo(d));
        System.out.println(a.compareTo(b));
    }
}

为什么不a.compareTo(b)编译(int不能被解除引用)?我知道compareTo需要对象,但我认为autoboxing会在必要时自动将int设置为Integer.为什么在这种情况下不会发生自动装箱?还有什么其他情况不会发生?

最佳答案
从Oracle tutorial on Autoboxing开始,拳击将发生的两种情况是,当原语是:

>作为参数传递给期望相应包装类的对象的方法.
>分配给相应包装类的变量.

在您的示例中评估的表达式(a.compareTo(d))不属于??任何一种情况.

这是JCP proposal for autoboxing中的一些有趣的附加信息,描述了赋值转换,方法调用转换和转换转换的机制和规则.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读