5
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 cannot be dereferenced)?我知道这compareTo需要对象,但我认为自动装箱会在必要时自动生成int一个。Integer为什么在这种情况下不会发生自动装箱?还有哪些其他情况不会发生?

4

1 回答 1

4

关于 Autoboxing 的 Oracle 教程中,将发生装箱的两种情况是,当原语是:

  • 作为参数传递给需要相应包装类的对象的方法。
  • 分配给相应包装类的变量。

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

在自动装箱的 JCP 提案中有一些有趣的附加信息,描述了赋值转换、方法调用转换和强制转换的机制和规则。

于 2013-02-22T03:58:16.950 回答